国产探花免费观看_亚洲丰满少妇自慰呻吟_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編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 右玉县| 龙州县| 阳原县| 上蔡县| 通辽市| 眉山市| 崇文区| 吉首市| 台东县| 海宁市| 山阴县| 芒康县| 华阴市| 洛隆县| 邻水| 大宁县| 贵州省| 海盐县| 金堂县| 边坝县| 侯马市| 长岛县| 于田县| 布尔津县| 万全县| 交口县| 常德市| 惠州市| 祁东县| 万源市| 万载县| 普陀区| 新竹市| 沾益县| 西昌市| 广灵县| 乐清市| 昌图县| 临江市| 安达市| 德惠市|