基于中科院seetaface2进行封装的JAVA人脸识别库,支持人脸识别、1:1比对、1:N比对

基于中科院seetaface2进行封装的JAVA人脸识别库,支持人脸识别、1:1比对、1:N比对
项目介绍

基于中科院seetaface2进行封装的JAVA人脸识别算法库,支持人脸识别、1:1比对、1:N比对。
seetaface2:附件中包含此源码

环境配置

1、下载model
2、下载doc目录中对应的lib包到本地并解压:Windows(64位)环境下载lib-win-x64.zip、Linux(64位)下载lib-linux-x64.tar.bz2,Linux环境还需要安装依赖库,详见:https://my.oschina.net/u/1580184/blog/3042404 ;
3、将doc中的faces-data.db下载到本地;(PS:如果不需要使用1:N人脸搜索,不需要此文件,需要将seetafce.properties中的sqlite.db.file配置注释掉);
4、将src/main/resources/中的seetaface.properties文件放到项目的resources根目录中;
  1. #linux系统中依赖的lib名称
  2. libs=holiday,SeetaFaceDetector200,SeetaPointDetector200,SeetaFaceRecognizer200,SeetaFaceCropper200,SeetaFace2JNI
  3. #Windows系统中依赖的lib名称
  4. #libs=libgcc_s_sjlj-1,libeay32,libquadmath-0,ssleay32,libgfortran-3,libopenblas,holiday,SeetaFaceDetector200,SeetaPointDetector200,SeetaFaceRecognizer200,SeetaFaceCropper200,SeetaFace2JNI
  5. #lib存放目录
  6. libs.path=/usr/local/seetaface2/lib
  7. #model存放目录
  8. bindata.dir=/usr/local/seetaface2/bindata
  9. ##sqlite配置(如果不用1:N人脸搜索功能,请删除下面5项sqlite开头的配置)
  10. sqlite.db.file=/data/faces-data.db
  11. sqlite.conn.maxTotal=50
  12. sqlite.conn.maxIdle=5
  13. sqlite.conn.minIdle=0
  14. sqlite.conn.maxWaitMillis=60000

复制代码

5、将seetafaceJNI-2.0.jar和依赖包导入到项目中,pom如下:
  1.    <properties>
  2.        <spring.version>4.2.8.RELEASE</spring.version>
  3.        <log4j.version>2.8.2</log4j.version>
  4.        <slf4j.version>1.7.25</slf4j.version>
  5.    </properties>
  6.    <dependencies>
  7.        <dependency>
  8.             <groupId>com.cnsugar.ai</groupId>
  9.             <artifactId>seetafaceJNI</artifactId>
  10.             <version>2.0</version>
  11.             <!–<scope>system</scope>–>
  12.             <!–<systemPath>${project.basedir}/lib/seetafaceJNI-2.0.jar</systemPath>–>
  13.        </dependency>
  14.        <dependency>
  15.            <groupId>org.springframework</groupId>
  16.            <artifactId>spring-core</artifactId>
  17.            <version>${spring.version}</version>
  18.        </dependency>
  19.        <dependency>
  20.            <groupId>org.slf4j</groupId>
  21.            <artifactId>slf4j-api</artifactId>
  22.            <version>${slf4j.version}</version>
  23.        </dependency>
  24.        <!– sqlite –>
  25.        <dependency>
  26.            <groupId>org.xerial</groupId>
  27.            <artifactId>sqlite-jdbc</artifactId>
  28.            <version>3.25.2</version>
  29.        </dependency>
  30.        <dependency>
  31.            <groupId>org.apache.commons</groupId>
  32.            <artifactId>commons-pool2</artifactId>
  33.            <version>2.4.2</version>
  34.        </dependency>
  35.    </dependencies>

复制代码

6、调用FaceHelper中的方法。

使用方法

所有方法都封装到了FaceHelper工具类中
  1.     /**
  2.      * 人脸比对
  3.      *
  4.      * @param img1
  5.      * @param img2
  6.      * @return 相似度
  7.      */
  8.     float compare(File img1, File img2);
  9.     float compare(byte[] img1, byte[] img2);
  10.     float compare(BufferedImage image1, BufferedImage image2);
  11.     /**
  12.      * 注册人脸(会裁剪图片)
  13.      *
  14.      * @param key 人脸照片唯一标识
  15.      * @param img 人脸照片
  16.      * @return
  17.      */
  18.     boolean register(String key, byte[] img);
  19.     /**
  20.      * 注册人脸(不裁剪图片)
  21.      *
  22.      * @param key 人脸照片唯一标识
  23.      * @param image 人脸照片
  24.      * @return
  25.      */
  26.     boolean register(String key, BufferedImage image)
  27.     /**
  28.      * 搜索人脸
  29.      *
  30.      * @param img 人脸照片
  31.      * @return
  32.      */
  33.     Result search(byte[] img);
  34.     Result search(BufferedImage image);
  35.     /**
  36.      * 人脸提取(裁剪)
  37.      *
  38.      * @param img
  39.      * @return return cropped face
  40.      */
  41.     BufferedImage crop(byte[] img);
  42.     BufferedImage crop(BufferedImage image);
  43.     /**
  44.      * 人脸识别
  45.      *
  46.      * @param img
  47.      * @return
  48.      */
  49.     SeetaRect[] detect(byte[] img);
  50.     SeetaRect[] detect(BufferedImage image);
  51.     /**
  52.      * 人脸识别(包含5个特征点位置)
  53.      *
  54.      * @param image
  55.      * @return
  56.      */
  57.     FaceLandmark detectLandmark(BufferedImage image);
  58.     /**
  59.      * 删除已注册的人脸
  60.      * @param keys
  61.      */
  62.     void removeRegister(String… keys);
  63.     /**
  64.      * 清除人脸库数据
  65.      */
  66.     void clear();

复制代码

  • 示例代码:1:1人脸比对
  1.     @org.junit.Test
  2.     public void testCompare() throws Exception {
  3.         String img1 = “F:\\ai\\demo-pic39.jpg”;
  4.         String img2 = “F:\\ai\\left_pic_one.jpg”;
  5.         System.out.println(“result:”+FaceHelper.compare(new File(img1), new File(img2)));
  6.     }

复制代码

  • 示例代码:1:N人脸搜索
    先调用FaceHelper.register()方法将人脸图片注册到seetaface2的人脸库(内存)中,同时会将图片存在sqlite数据库中进行持久化,下次应用程序启动时会自动从sqlite中把图片读取出来重新注册到seetafce2的内存库中
  1.     @org.junit.Test
  2.     public void testRegister() throws IOException {
  3.         //将F:\ai\star目录下的jpg、png图片都注册到人脸库中,以文件名为key
  4.         Collection<File> files = FileUtils.listFiles(new File(“F:\\ai\\star”), new String[]{“jpg”, “png”}, false);
  5.         for (File file : files) {
  6.             String key = file.getName();
  7.             try {
  8.                 FaceHelper.register(key, FileUtils.readFileToByteArray(file));
  9.             } catch (Exception e) {
  10.                 e.printStackTrace();
  11.             }
  12.         }
  13.     }
  14.     @org.junit.Test
  15.     public void testSearch() throws IOException {
  16.         SeetafaceBuilder.build();//系统启动时先调用初始化方法
  17.         //等待初始化完成
  18.         while (SeetafaceBuilder.getFaceDbStatus() == SeetafaceBuilder.FacedbStatus.LOADING || SeetafaceBuilder.getFaceDbStatus() == SeetafaceBuilder.FacedbStatus.READY) {
  19.             try {
  20.                 Thread.sleep(100);
  21.             } catch (InterruptedException e) {
  22.                 e.printStackTrace();
  23.             }
  24.         }
  25.         long l = System.currentTimeMillis();
  26.         Result result = FaceHelper.search(FileUtils.readFileToByteArray(new File(“F:\\ai\\gtl.jpg”)));
  27.         System.out.println(“搜索结果:” + result + “, 耗时:” + (System.currentTimeMillis() – l));
  28.     }

复制代码

下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,由于源码具有复制性,一经售出,概不退换。用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【安安资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容,由于源码具有复制性,一经售出,概不退换。
安安资源网 » 基于中科院seetaface2进行封装的JAVA人脸识别库,支持人脸识别、1:1比对、1:N比对