@@ -152,6 +152,52 @@ PHP_METHOD(opencv_lbph_face_recognizer, write)
152152 RETURN_NULL ();
153153}
154154
155+ PHP_METHOD (opencv_lbph_face_recognizer, update)
156+ {
157+ zval *src_zval, *labels_zval;
158+ zend_ulong _h;
159+ zval *array_val_zval;
160+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " aa" , &src_zval, &labels_zval) == FAILURE) {
161+ RETURN_NULL ();
162+ }
163+ std::vector<Mat> src;
164+ std::vector<int > labels;
165+ // check
166+ opencv_lbph_face_recognizer_object *obj = Z_PHP_LBPH_FACE_RECOGNIZER_OBJ_P (getThis ());
167+ unsigned long src_count = zend_hash_num_elements (Z_ARRVAL_P (src_zval));
168+ src.reserve (src_count);// 指定长度
169+ opencv_mat_object *mat_obj;
170+
171+ ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (src_zval),_h,array_val_zval){
172+ // check array_val_zval is Mat object
173+ again1:
174+ if (Z_TYPE_P (array_val_zval) == IS_OBJECT && Z_OBJCE_P (array_val_zval)==opencv_mat_ce){
175+ mat_obj = Z_PHP_MAT_OBJ_P (array_val_zval);
176+ src.push_back (*mat_obj->mat );
177+ }else if (Z_TYPE_P (array_val_zval) == IS_REFERENCE){
178+ array_val_zval = Z_REFVAL_P (array_val_zval);
179+ goto again1;
180+ } else {
181+ opencv_throw_exception (" array value just Mat object." );
182+ RETURN_NULL ();
183+ }
184+ }ZEND_HASH_FOREACH_END ();
185+ ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (labels_zval),_h,array_val_zval){
186+ again2:
187+ if (Z_TYPE_P (array_val_zval) == IS_LONG){
188+ labels.push_back ((int )zval_get_long (array_val_zval));
189+ }else if (Z_TYPE_P (array_val_zval) == IS_REFERENCE){
190+ array_val_zval = Z_REFVAL_P (array_val_zval);
191+ goto again2;
192+ } else {
193+ opencv_throw_exception (" array value just number." );
194+ RETURN_NULL ();
195+ }
196+ }ZEND_HASH_FOREACH_END ();
197+ obj->faceRecognizer ->update (src,labels);
198+ RETURN_NULL ();
199+ }
200+
155201/* *
156202 * opencv_lbph_face_recognizer_methods[]
157203 */
@@ -163,6 +209,7 @@ const zend_function_entry opencv_lbph_face_recognizer_methods[] = {
163209 PHP_ME (opencv_lbph_face_recognizer, predictConfidence, NULL , ZEND_ACC_PUBLIC)
164210 PHP_ME (opencv_lbph_face_recognizer, read, NULL , ZEND_ACC_PUBLIC)
165211 PHP_ME (opencv_lbph_face_recognizer, write, NULL , ZEND_ACC_PUBLIC)
212+ PHP_ME (opencv_lbph_face_recognizer, update, NULL , ZEND_ACC_PUBLIC)
166213 PHP_FE_END
167214};
168215/* }}} */
0 commit comments