Face.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. 
  2. using OpenCVForUnity.CoreModule;
  3. using OpenCVForUnity.UtilsModule;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Runtime.InteropServices;
  7. namespace OpenCVForUnity.FaceModule
  8. {
  9. // C++: class Face
  10. //javadoc: Face
  11. public class Face
  12. {
  13. //
  14. // C++: Ptr_Facemark cv::face::createFacemarkAAM()
  15. //
  16. //javadoc: createFacemarkAAM()
  17. public static Facemark createFacemarkAAM ()
  18. {
  19. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  20. Facemark retVal = Facemark.__fromPtr__(face_Face_createFacemarkAAM_10());
  21. return retVal;
  22. #else
  23. return null;
  24. #endif
  25. }
  26. //
  27. // C++: Ptr_Facemark cv::face::createFacemarkKazemi()
  28. //
  29. //javadoc: createFacemarkKazemi()
  30. public static Facemark createFacemarkKazemi ()
  31. {
  32. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  33. Facemark retVal = Facemark.__fromPtr__(face_Face_createFacemarkKazemi_10());
  34. return retVal;
  35. #else
  36. return null;
  37. #endif
  38. }
  39. //
  40. // C++: Ptr_Facemark cv::face::createFacemarkLBF()
  41. //
  42. //javadoc: createFacemarkLBF()
  43. public static Facemark createFacemarkLBF ()
  44. {
  45. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  46. Facemark retVal = Facemark.__fromPtr__(face_Face_createFacemarkLBF_10());
  47. return retVal;
  48. #else
  49. return null;
  50. #endif
  51. }
  52. //
  53. // C++: bool cv::face::getFacesHAAR(Mat image, Mat& faces, String face_cascade_name)
  54. //
  55. //javadoc: getFacesHAAR(image, faces, face_cascade_name)
  56. public static bool getFacesHAAR (Mat image, Mat faces, string face_cascade_name)
  57. {
  58. if (image != null) image.ThrowIfDisposed ();
  59. if (faces != null) faces.ThrowIfDisposed ();
  60. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  61. bool retVal = face_Face_getFacesHAAR_10(image.nativeObj, faces.nativeObj, face_cascade_name);
  62. return retVal;
  63. #else
  64. return false;
  65. #endif
  66. }
  67. //
  68. // C++: bool cv::face::loadDatasetList(String imageList, String annotationList, vector_String images, vector_String annotations)
  69. //
  70. //javadoc: loadDatasetList(imageList, annotationList, images, annotations)
  71. public static bool loadDatasetList (string imageList, string annotationList, List<string> images, List<string> annotations)
  72. {
  73. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  74. Mat images_mat = Converters.vector_String_to_Mat(images);
  75. Mat annotations_mat = Converters.vector_String_to_Mat(annotations);
  76. bool retVal = face_Face_loadDatasetList_10(imageList, annotationList, images_mat.nativeObj, annotations_mat.nativeObj);
  77. return retVal;
  78. #else
  79. return false;
  80. #endif
  81. }
  82. //
  83. // C++: bool cv::face::loadFacePoints(String filename, Mat& points, float offset = 0.0f)
  84. //
  85. //javadoc: loadFacePoints(filename, points, offset)
  86. public static bool loadFacePoints (string filename, Mat points, float offset)
  87. {
  88. if (points != null) points.ThrowIfDisposed ();
  89. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  90. bool retVal = face_Face_loadFacePoints_10(filename, points.nativeObj, offset);
  91. return retVal;
  92. #else
  93. return false;
  94. #endif
  95. }
  96. //javadoc: loadFacePoints(filename, points)
  97. public static bool loadFacePoints (string filename, Mat points)
  98. {
  99. if (points != null) points.ThrowIfDisposed ();
  100. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  101. bool retVal = face_Face_loadFacePoints_11(filename, points.nativeObj);
  102. return retVal;
  103. #else
  104. return false;
  105. #endif
  106. }
  107. //
  108. // C++: bool cv::face::loadTrainingData(String filename, vector_String images, Mat& facePoints, char delim = ' ', float offset = 0.0f)
  109. //
  110. //javadoc: loadTrainingData(filename, images, facePoints, delim, offset)
  111. public static bool loadTrainingData (string filename, List<string> images, Mat facePoints, char delim, float offset)
  112. {
  113. if (facePoints != null) facePoints.ThrowIfDisposed ();
  114. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  115. Mat images_mat = Converters.vector_String_to_Mat(images);
  116. bool retVal = face_Face_loadTrainingData_10(filename, images_mat.nativeObj, facePoints.nativeObj, delim, offset);
  117. return retVal;
  118. #else
  119. return false;
  120. #endif
  121. }
  122. //javadoc: loadTrainingData(filename, images, facePoints, delim)
  123. public static bool loadTrainingData (string filename, List<string> images, Mat facePoints, char delim)
  124. {
  125. if (facePoints != null) facePoints.ThrowIfDisposed ();
  126. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  127. Mat images_mat = Converters.vector_String_to_Mat(images);
  128. bool retVal = face_Face_loadTrainingData_11(filename, images_mat.nativeObj, facePoints.nativeObj, delim);
  129. return retVal;
  130. #else
  131. return false;
  132. #endif
  133. }
  134. //javadoc: loadTrainingData(filename, images, facePoints)
  135. public static bool loadTrainingData (string filename, List<string> images, Mat facePoints)
  136. {
  137. if (facePoints != null) facePoints.ThrowIfDisposed ();
  138. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  139. Mat images_mat = Converters.vector_String_to_Mat(images);
  140. bool retVal = face_Face_loadTrainingData_12(filename, images_mat.nativeObj, facePoints.nativeObj);
  141. return retVal;
  142. #else
  143. return false;
  144. #endif
  145. }
  146. //
  147. // C++: bool cv::face::loadTrainingData(String imageList, String groundTruth, vector_String images, Mat& facePoints, float offset = 0.0f)
  148. //
  149. //javadoc: loadTrainingData(imageList, groundTruth, images, facePoints, offset)
  150. public static bool loadTrainingData (string imageList, string groundTruth, List<string> images, Mat facePoints, float offset)
  151. {
  152. if (facePoints != null) facePoints.ThrowIfDisposed ();
  153. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  154. Mat images_mat = Converters.vector_String_to_Mat(images);
  155. bool retVal = face_Face_loadTrainingData_13(imageList, groundTruth, images_mat.nativeObj, facePoints.nativeObj, offset);
  156. return retVal;
  157. #else
  158. return false;
  159. #endif
  160. }
  161. //javadoc: loadTrainingData(imageList, groundTruth, images, facePoints)
  162. public static bool loadTrainingData (string imageList, string groundTruth, List<string> images, Mat facePoints)
  163. {
  164. if (facePoints != null) facePoints.ThrowIfDisposed ();
  165. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  166. Mat images_mat = Converters.vector_String_to_Mat(images);
  167. bool retVal = face_Face_loadTrainingData_14(imageList, groundTruth, images_mat.nativeObj, facePoints.nativeObj);
  168. return retVal;
  169. #else
  170. return false;
  171. #endif
  172. }
  173. //
  174. // C++: bool cv::face::loadTrainingData(vector_String filename, vector_vector_Point2f trainlandmarks, vector_String trainimages)
  175. //
  176. //javadoc: loadTrainingData(filename, trainlandmarks, trainimages)
  177. public static bool loadTrainingData (List<string> filename, List<MatOfPoint2f> trainlandmarks, List<string> trainimages)
  178. {
  179. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  180. Mat filename_mat = Converters.vector_String_to_Mat(filename);
  181. List<Mat> trainlandmarks_tmplm = new List<Mat>((trainlandmarks != null) ? trainlandmarks.Count : 0);
  182. Mat trainlandmarks_mat = Converters.vector_vector_Point2f_to_Mat(trainlandmarks, trainlandmarks_tmplm);
  183. Mat trainimages_mat = Converters.vector_String_to_Mat(trainimages);
  184. bool retVal = face_Face_loadTrainingData_15(filename_mat.nativeObj, trainlandmarks_mat.nativeObj, trainimages_mat.nativeObj);
  185. return retVal;
  186. #else
  187. return false;
  188. #endif
  189. }
  190. //
  191. // C++: void cv::face::drawFacemarks(Mat& image, Mat points, Scalar color = Scalar(255,0,0))
  192. //
  193. //javadoc: drawFacemarks(image, points, color)
  194. public static void drawFacemarks (Mat image, Mat points, Scalar color)
  195. {
  196. if (image != null) image.ThrowIfDisposed ();
  197. if (points != null) points.ThrowIfDisposed ();
  198. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  199. face_Face_drawFacemarks_10(image.nativeObj, points.nativeObj, color.val[0], color.val[1], color.val[2], color.val[3]);
  200. return;
  201. #else
  202. return;
  203. #endif
  204. }
  205. //javadoc: drawFacemarks(image, points)
  206. public static void drawFacemarks (Mat image, Mat points)
  207. {
  208. if (image != null) image.ThrowIfDisposed ();
  209. if (points != null) points.ThrowIfDisposed ();
  210. #if ((UNITY_ANDROID || UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR) || UNITY_5 || UNITY_5_3_OR_NEWER
  211. face_Face_drawFacemarks_11(image.nativeObj, points.nativeObj);
  212. return;
  213. #else
  214. return;
  215. #endif
  216. }
  217. #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
  218. const string LIBNAME = "__Internal";
  219. #else
  220. const string LIBNAME = "opencvforunity";
  221. #endif
  222. // C++: Ptr_Facemark cv::face::createFacemarkAAM()
  223. [DllImport (LIBNAME)]
  224. private static extern IntPtr face_Face_createFacemarkAAM_10 ();
  225. // C++: Ptr_Facemark cv::face::createFacemarkKazemi()
  226. [DllImport (LIBNAME)]
  227. private static extern IntPtr face_Face_createFacemarkKazemi_10 ();
  228. // C++: Ptr_Facemark cv::face::createFacemarkLBF()
  229. [DllImport (LIBNAME)]
  230. private static extern IntPtr face_Face_createFacemarkLBF_10 ();
  231. // C++: bool cv::face::getFacesHAAR(Mat image, Mat& faces, String face_cascade_name)
  232. [DllImport (LIBNAME)]
  233. private static extern bool face_Face_getFacesHAAR_10 (IntPtr image_nativeObj, IntPtr faces_nativeObj, string face_cascade_name);
  234. // C++: bool cv::face::loadDatasetList(String imageList, String annotationList, vector_String images, vector_String annotations)
  235. [DllImport (LIBNAME)]
  236. private static extern bool face_Face_loadDatasetList_10 (string imageList, string annotationList, IntPtr images_mat_nativeObj, IntPtr annotations_mat_nativeObj);
  237. // C++: bool cv::face::loadFacePoints(String filename, Mat& points, float offset = 0.0f)
  238. [DllImport (LIBNAME)]
  239. private static extern bool face_Face_loadFacePoints_10 (string filename, IntPtr points_nativeObj, float offset);
  240. [DllImport (LIBNAME)]
  241. private static extern bool face_Face_loadFacePoints_11 (string filename, IntPtr points_nativeObj);
  242. // C++: bool cv::face::loadTrainingData(String filename, vector_String images, Mat& facePoints, char delim = ' ', float offset = 0.0f)
  243. [DllImport (LIBNAME)]
  244. private static extern bool face_Face_loadTrainingData_10 (string filename, IntPtr images_mat_nativeObj, IntPtr facePoints_nativeObj, char delim, float offset);
  245. [DllImport (LIBNAME)]
  246. private static extern bool face_Face_loadTrainingData_11 (string filename, IntPtr images_mat_nativeObj, IntPtr facePoints_nativeObj, char delim);
  247. [DllImport (LIBNAME)]
  248. private static extern bool face_Face_loadTrainingData_12 (string filename, IntPtr images_mat_nativeObj, IntPtr facePoints_nativeObj);
  249. // C++: bool cv::face::loadTrainingData(String imageList, String groundTruth, vector_String images, Mat& facePoints, float offset = 0.0f)
  250. [DllImport (LIBNAME)]
  251. private static extern bool face_Face_loadTrainingData_13 (string imageList, string groundTruth, IntPtr images_mat_nativeObj, IntPtr facePoints_nativeObj, float offset);
  252. [DllImport (LIBNAME)]
  253. private static extern bool face_Face_loadTrainingData_14 (string imageList, string groundTruth, IntPtr images_mat_nativeObj, IntPtr facePoints_nativeObj);
  254. // C++: bool cv::face::loadTrainingData(vector_String filename, vector_vector_Point2f trainlandmarks, vector_String trainimages)
  255. [DllImport (LIBNAME)]
  256. private static extern bool face_Face_loadTrainingData_15 (IntPtr filename_mat_nativeObj, IntPtr trainlandmarks_mat_nativeObj, IntPtr trainimages_mat_nativeObj);
  257. // C++: void cv::face::drawFacemarks(Mat& image, Mat points, Scalar color = Scalar(255,0,0))
  258. [DllImport (LIBNAME)]
  259. private static extern void face_Face_drawFacemarks_10 (IntPtr image_nativeObj, IntPtr points_nativeObj, double color_val0, double color_val1, double color_val2, double color_val3);
  260. [DllImport (LIBNAME)]
  261. private static extern void face_Face_drawFacemarks_11 (IntPtr image_nativeObj, IntPtr points_nativeObj);
  262. }
  263. }