arcface上线了新版 正好有空 赶紧下载体验了一番 凡是过程中也遇到一些问题

1.初始化
 [DllImport("libarcsoft_face_engine.dll", EntryPoint = "ASFInitEngine", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]

private static extern int ASFInitEngine(uint detectMode, int orientPriority, int scale, int maxFaceNumber, uint combinedMask, out IntPtr pEngine);
开始时,写了个long detectMode,返回错误信息是:0x16004,(detectFaceScaleVal 不支持)正式鬼扯,害我各种调整scale。
改成uint就ok了。
话说就一个mode,您弄
  const uint ASF_DETECT_MODE_VIDEO = 0x00000000;  //Video模式,一般用于多帧连续检测
  const uint ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF;  //Image模式,一般用于静态图的单次检测

这两宝贝,我也是醉了。0/1不行吗?

2.人脸检测

[DllImport("libarcsoft_face_engine.dll", EntryPoint = "ASFDetectFaces", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern int ASFDetectFaces(IntPtr pEngine, int width, int height, int format, IntPtr pImageData, out ASF_MultiFaceInfo faceInfo);

开始时,弄了张身份证照片,102的宽度,不是4的倍数,返回0x1600F,手动编辑图片,拉伸成104的宽度便告成功。
最终写了个方法,自动设成4的倍数,如下:
    private (int W, int H, IntPtr PImageData) GetImageData(Bitmap bitmap)
        {

var bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            int width = (bitmap.Width + 3) / 4 * 4;

var bytesCount = bmpData.Height * width * 3;
            IntPtr pImageData = Marshal.AllocCoTaskMem(bytesCount);
            if (width == bitmap.Width)
                CopyMemory(pImageData, bmpData.Scan0, bytesCount);
            else
                for (int i = 0; i < bitmap.Height; i++)
                    CopyMemory(IntPtr.Add(pImageData, i * width * 3), IntPtr.Add(bmpData.Scan0, i * bmpData.Stride), bmpData.Stride);
            bitmap.UnlockBits(bmpData);
            return new ValueTuple<int, int, IntPtr>(width, bitmap.Height, pImageData);
        }

踩了这两个坑后,便愉快的运行了。

话说2.0的优点也不少:
1.特征值缩小了,由原来的20多K变成1032字节(咱就不能变成1024?)
2.比对速度快了很多很多,四线程10万次的比对也只要3秒多钟。

最新文章

  1. VMware安装64位操作系统提示Intel VT-x处于禁用状态的解决办法
  2. 自定义ViewPager控制是否滑动
  3. 各种less开发工具
  4. light oj 1138 - Trailing Zeroes (III)【规律&amp;&amp;二分】
  5. mybatis和hibernate对比
  6. Windows多线程同步系列之一-----互斥对象
  7. Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.
  8. 使用nodejs爬前程无忧前端技能排行(半半成品)
  9. .net core 开发短网址平台的思路
  10. 《k8s-1.13版本源码分析》-测试环境搭建(k8s-1.13版本单节点环境搭建)
  11. 又双叒叕换,微软这次换Edge了
  12. computed计算属性
  13. [Java] SpringMVC工作原理之四:MultipartResolver
  14. Confluence 6 安装 PostgreSQL
  15. 剑指Offer 52. 正则表达式匹配 (字符串)
  16. 【洛谷】【搜索+剪枝】P1731 [NOI1999]生日蛋糕
  17. js的style.display小问题
  18. Redis实战(八)Redis的配置文件介绍
  19. 【虚拟化实战】Cluster设计之一资源池
  20. Fragment管理工具类

热门文章

  1. 轻量ORM-SqlRepoEx (九)与Dapper共舞
  2. iOS universallinks唤醒app
  3. 搭建Apache服务器并使用自签证书实现https访问
  4. wso2 ei 6.4.0安装笔记
  5. 使用Letsencrypt做SSL certificate
  6. laravel-admin 创建数据库并生成控制器
  7. 通过samba服务将centos7指定文件挂载到window下
  8. 单片机,struct ,union定义标志,节约RAM
  9. vue中cssModules理解可以用于加密和避免重复使用
  10. 博科Brocade 300光纤交换机配置zone教程