原声的PHP,index.php

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header ("Cache-Control: no-cache, must-revalidate");

header ("Pragma: no-cache");

require_once("include/utility.php");

$_rurl = substr($_SERVER["REDIRECT_URL"], strlen(SITE_BASE));

$_params = preg_split("/\//", $_rurl);

$_controller = count($_params) > 0 && $_params[0] != "" ? $_params[0] : "home";

$_action = count($_params) > 1 && $_params[1] != "" ? $_params[1] : "index";

$_params = array_slice($_params, 2);

$controller_class = stripslashes($_controller) . "Controller";

$controller_path = "controller/" . $controller_class . ".php";

if (file_exists($controller_path))

{

require_once($controller_path);

$controller = new $controller_class;

$controller->process($_controller, $_action, $_params);

}

else

{

$controller = new Controller;

$controller->showError(ERR_NOTFOUND_PAGE);

}

class Controller {

public $_layout;

public $_view, $_viewjs;

public $_js, $_css;

private $_request;

public $_navi_menu;

public $_subnavi_menu;

public $_page_id;

public $_action_type;

public $_params;

public function __construct(){

$this->inputs();

$this->_js = array();

$this->_css = array();

if ($this->_page_id != "install" && !defined('DB_HOSTNAME')) {

$this->forward("install");

}

}

public function get_referer(){

return $_SERVER['HTTP_REFERER'];

}

public function response($data,$status = 200){

$this->_code = ($status)?$status:200;

$this->set_headers();

echo $data;

exit;

}

private function get_status_message(){

$status = array(

100 => 'Continue',

101 => 'Switching Protocols',

200 => 'OK',

201 => 'Created',

202 => 'Accepted',

203 => 'Non-Authoritative Information',

204 => 'No Content',

205 => 'Reset Content',

206 => 'Partial Content',

300 => 'Multiple Choices',

301 => 'Moved Permanently',

302 => 'Found',

303 => 'See Other',

304 => 'Not Modified',

305 => 'Use Proxy',

306 => '(Unused)',

307 => 'Temporary Redirect',

400 => 'Bad Request',

401 => 'Unauthorized',

402 => 'Payment Required',

403 => 'Forbidden',

404 => 'Not Found',

405 => 'Method Not Allowed',

406 => 'Not Acceptable',

407 => 'Proxy Authentication Required',

408 => 'Request Timeout',

409 => 'Conflict',

410 => 'Gone',

411 => 'Length Required',

412 => 'Precondition Failed',

413 => 'Request Entity Too Large',

414 => 'Request-URI Too Long',

415 => 'Unsupported Media Type',

416 => 'Requested Range Not Satisfiable',

417 => 'Expectation Failed',

500 => 'Internal Server Error',

501 => 'Not Implemented',

502 => 'Bad Gateway',

503 => 'Service Unavailable',

504 => 'Gateway Timeout',

505 => 'HTTP Version Not Supported');

return ($status[$this->_code])?$status[$this->_code]:$status[500];

}

public function get_request_method(){

return $_SERVER['REQUEST_METHOD'];

}

private function inputs(){

switch($this->get_request_method()){

case "POST":

$this->_request = array_merge($this->cleanInputs($_GET), $this->cleanInputs($_POST));

break;

case "GET":

case "DELETE":

$this->_request = $this->cleanInputs($_GET);

break;

case "PUT":

parse_str(file_get_contents("php://input"),$this->_request);

$this->_request = $this->cleanInputs($this->_request);

break;

default:

$this->response('',406);

break;

}

}

private function cleanInputs($data){

$clean_input = array();

if(is_array($data)){

foreach($data as $k => $v){

$clean_input[$k] = $this->cleanInputs($v);

}

}else{

/*

if(get_magic_quotes_gpc()){

$data = trim(stripslashes($data));

}

$data = strip_tags($data);

$clean_input = trim($data);

*/

$clean_input = $data;

}

return $clean_input;

}

private function set_headers(){

if ($this->_code != 200) {

header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());

}

header("Content-Type:".$this->_content_type);

}

public function json($data){

if(!is_array($data))

$data = array($data);

return json_encode($data);

}

public function urlVar($data){

if(!is_array($data))

$data = array($data);

$ret = "";

foreach ($data as $key => $value) {

if ($ret != "")

$ret .= "&";

$ret .= $key . "=" . urlencode($value);

}

return $ret;

}

public function start()

{

$db = db::getDB();

$db->begin();

}

public function commit()

{

$db = db::getDB();

$db->commit();

}

public function rollback()

{

$db = db::getDB();

$db->rollback();

}

public function finish($data, $err, $status=200)

{

global $g_err_msg;

$db = db::getDB();

if ($err == ERR_OK)

$db->commit();

else

$db->rollback();

if ($err == ERR_OK)

$ret = array("err_code" => $err, "err_msg" => $g_err_msg);

else {

if ($g_err_msg == null)

$g_err_msg = _err_msg($err);

$ret = array("err_code" => $err, "err_msg" => $g_err_msg);

}

if ($data != null) {

$data = is_array($data) ? $data : array($data);

$ret = array_merge($ret , $data);

}

$this->response($this->json($ret), $status);

}

public function finish_for_as3($data, $err, $status=200)

{

global $g_err_msg;

$db = db::getDB();

if ($err == ERR_OK)

$db->commit();

else

$db->rollback();

if ($err == ERR_OK)

$ret = array("err_code" => $err, "err_msg" => "");

else {

if ($g_err_msg == null)

$g_err_msg = _err_msg($err);

$ret = array("err_code" => $err, "err_msg" => $g_err_msg);

}

if ($err === ERR_OK) {

if ($data != null) {

$data = is_array($data) ? $data : array($data);

$ret = array_merge($ret , $data);

}

$this->response($this->urlVar($ret), $status);

}

else {

$this->response($this->urlVar($ret), $status);

}

}

public function checkError($err)

{

if ($err != ERR_OK)

$this->finish(null, $err);

}

// added by rcj, for mobile service

public function checkError_for_as3($err)

{

if ($err != ERR_OK)

$this->finish_for_as3(null, $err);

}

public function checkRequired($params)

{

global $g_err_msg;

$err = ERR_OK;

$params = is_array($params) ? $params : array($params);

foreach($params as $param)

{

if ($this->$param == null) {

$g_err_msg .= "Request parameter \"$param\" is required.\n";

$err = ERR_INVALID_REQUIRED;

}

}

$this->checkError($err);

}

public function __get($prop) {

if ($prop == "request") {

return $this->_request;

}

else {

return $this->_request[$prop];

}

}

public function __set($prop, $val) {

$this->_request[$prop] = $val;

}

public function __call($method, $params) {

}

public function existProp($prop)

{

$keys = array_keys($this->_request);

foreach($keys as $key)

{

if ($key == $prop)

return true;

}

return false;

}

public function process($_controller, $_action, $_params){

$this->_params = $_params;

$this->_action_type = ACTIONTYPE_HTML;

if (strstr($_action, "_ajax"))

$this->_action_type = ACTIONTYPE_AJAXJSON;

else if (strstr($_action, "_refresh")) {

$this->_action_type = ACTIONTYPE_AJAXHTML;

$_action = strstr($_action, "_refresh", true);

$this->display_refresh = true;

}

if((int)method_exists($this,$_action) > 0)

{

$this->checkPriv($_action, UTYPE_NONE);

$ret = @call_user_func_array(array($this, $_action), $_params);

$ret = preg_split("/\//", $ret, 2);

$vw = "";

if (count($ret) <= 1) {

$this->_layout = _template("layout/main.php");

if (count($ret) == 1)

$vw = $ret[0];

}

else {

$this->_layout = _template("layout/" . $ret[0] . ".php");

$vw = $ret[1];

}

if ($this->display_refresh)

$this->_layout = _template("layout/none.php");

$view_path = "view/";

//if ($_controller == "help") {

//$view_path .= "help/" . _utype() . "/";

//}

if ($vw == "") {

$this->_view = _template($view_path . $_controller . "_" . $_action . ".php");

$this->_viewjs = _template($view_path . $_controller . "_" . $_action . ".js");

}

else {

$this->_view = _template($view_path . $vw . ".php");

$this->_viewjs = _template($view_path . $vw . ".js");

}

if (file_exists($this->_layout))

require_once($this->_layout);

else

$this->showError(ERR_NOTFOUND_PAGE);

}

else

$this->showError(ERR_NOTFOUND_PAGE);

}

public function showError($err_code, $title = "错误发生")

{

$this->err_title = $title;

$this->err_msg = _err_msg($err_code);

switch ($err_code) {

case ERR_NODATA:

case ERR_NOTFOUND_API:

case ERR_NOTFOUND_PAGE:

$this->_code = 404;

break;

case ERR_NOPRIV:

$this->_code = 403;

break;

case ERR_ALREADYLOGIN:

case ERR_FAILLOGIN:

case ERR_NOT_LOGINED:

$this->_code = 401;

break;

default:

$this->_code = 400;

break;

}

$this->set_headers();

require_once(_template("layout/error.php"));

exit;

}

public function forward($url) {

_goto(SITE_BASE . $url);

}

public function setActive($menu, $menu2="#none#", $menu3="#none#") {

print ($menu == $this->_navi_menu || $menu2 == $this->_navi_menu || $menu3 == $this->_navi_menu) ? "active" : "";

}

public function setSubActive($submenu) {

print $submenu == $this->_subnavi_menu ? "active" : "";

}

public function outJson($result, $err) {

$ret = array("err_code" => $err, "err_msg" => $g_err_msg);

if ($err === ERR_OK) {

if ($result != null) {

$result = is_array($result) ? $result : array($result);

$ret = array_merge($ret , $result);

}

}

print $this->json($ret);

exit;

}

public function checkPriv($_action, $utype, $priv_group = PRIV_NONE, $priv = PRIV_NONE)

{

if(_in_blacklist()) {

if ($this->_action_type == ACTIONTYPE_AJAXJSON) {

$this->checkError(ERR_BLACKIP);

}

else { // ACTIONTYPE_AJAXHTML, ACTIONTYPE_HTML

$this->showError(ERR_BLACKIP);

}

}

if ($utype == UTYPE_NONE)

return;

$cur_utype = _utype();

if ($cur_utype == null)

{

if ($this->_action_type == ACTIONTYPE_AJAXJSON) {

$this->finish($info, ERR_NOT_LOGINED);

}

else if ($this->_action_type == ACTIONTYPE_HTML) {

$this->forward("login");

}

else { // ACTIONTYPE_AJAXHTML

print "";

exit;

}

}

if ($cur_utype & UTYPE_SUPERADMIN ||

$utype & UTYPE_ADMIN && $cur_utype & UTYPE_ADMIN ||

$utype & UTYPE_GUARD && $cur_utype & UTYPE_GUARD ||

$utype & UTYPE_APPROBATOR && $cur_utype & UTYPE_APPROBATOR ||

$utype & UTYPE_VISITOR && $cur_utype & UTYPE_VISITOR ||

$utype & UTYPE_PRISONER && $cur_utype & UTYPE_PRISONER)

{

if ($priv_group == PRIV_NONE)

return;

if (_priv($priv_group, $priv))

return;

}

if ($this->_action_type == ACTIONTYPE_AJAXJSON) {

$this->checkError(ERR_NOPRIV);

}

else { // ACTIONTYPE_AJAXHTML, ACTIONTYPE_HTML

$this->showError(ERR_NOPRIV);

}

}

public function addjs($jsfile) {

$this->_js[] = $jsfile;

}

public function addcss($cssfile) {

$this->_css[] = $cssfile;

}

function include_viewjs()

{

if ($this->_viewjs != null) {

if (file_exists($this->_viewjs)) {

?>

$fp = fopen(SITE_ROOT . "/" . $this->_viewjs, "r");

fpassthru($fp);

?><?php

}

else if (file_exists($this->_viewjs . ".php"))

{

include_once($this->_viewjs . ".php");

}

}

}

}

?>

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值