Face.cs 12 KB

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