@@ -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" 
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