国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php擴展中如何定義線程安全的全局對象

2020-03-22 19:42:05
字體:
來源:轉載
供稿:網友
  • 傳統的php裁剪類只能按位置裁剪。如按中間位置裁剪。這種裁剪方式可能會導致一個人被截成兩段。為了解決這個問題,最近開發了一個php擴展(tclip),能自動識別人臉或者圖像中其它重要區域,然后進行裁剪。裁剪效果如下:

    原圖:


    如果按照從中間截取為 400 * 225 大小大圖片。效果如下:


    使用tclip擴展裁剪圖片效果如下:


    在人臉識別的過程中,需要使用opencv中的CascadeClassifier加載一個xml的配置文檔。因為文檔比較大,導致加載時間比較長。為了提高裁剪的效率,決定在php擴展初始化的時候加載,并使用html' target='_blank'>全局變量存儲這個CascadeClassifier對象。這樣就可以在每次裁剪的時候直接使用這個配置文件,而無需再加載。

    開始,把php_tclip.h中的全局變量聲明部分修改為如下:

    ZEND_BEGIN_MODULE_GLOBALS(tclip)	CascadeClassifier face_cascade;	char *face_config_path;ZEND_END_MODULE_GLOBALS(tclip)

    結果報如下錯誤:
    error: ‘CascadeClassifier’ does not name a type
    看來這個類沒有在頭文件中聲明。那就另辟蹊徑,改為其它方式。把代碼改為:

    ZEND_BEGIN_MODULE_GLOBALS(tclip)	void *face_cascade;	char *face_config_path;ZEND_END_MODULE_GLOBALS(tclip)

    然后在tclip.c中進行了如下修改:
    1.首先定義了一個全局變量。

    static CascadeClassifier face_cascade;

    2.修改PHP_MINIT_FUNCTION(tclip)。代碼如下:

    PHP_MINIT_FUNCTION(tclip){	/* If you have INI entries, uncomment these lines */	REGISTER_INI_ENTRIES();	string face_config_path = (TCLIP_G(face_config_path) == "" "| TCLIP_G(face_config_path) == NULL)? "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" :TCLIP_G(face_config_path);	if( !face_cascade.load( face_config_path ) ){		php_error_docref(NULL TSRMLS_CC, E_WARNING, "can not load classifier file!%s", face_config_path.c_str());        return FAILURE;    }	TCLIP_G(face_cascade) = &face_cascade;	return SUCCESS;}

    調用全局對象的方式如下:

    ((CascadeClassifier *)TCLIP_G(face_cascade))->detectMultiScale( img_gray, faces, 1.1, 2, 0"CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    注意,php擴展想線程安全,那就用相關宏來訪問全局變量。如上面的TCLIP_G(face_cascade)。


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 苍溪县| 绥化市| 海城市| 威远县| 成安县| 金秀| 郸城县| 古浪县| 高台县| 崇左市| 平阳县| 郁南县| 嘉义市| 黄浦区| 增城市| 河间市| 宁化县| 临沂市| 卢氏县| 浦江县| 清水河县| 平顶山市| 永平县| 广平县| 沾化县| 安岳县| 高唐县| 拉孜县| 白山市| 凭祥市| 茶陵县| 同德县| 泰兴市| 潞西市| 东安县| 浦江县| 肥乡县| 枣阳市| 鲁甸县| 淳安县| 南雄市|