博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C#】调用2.0的坑
阅读量:7041 次
发布时间:2019-06-28

本文共 1802 字,大约阅读时间需要 6 分钟。

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
(width, bitmap.Height, pImageData); }

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

话说2.0的优点也不少:

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

转载地址:http://cvhal.baihongyu.com/

你可能感兴趣的文章
【物联网】QCA4010开发环境的搭建
查看>>
NIO.2 入门,第 2 部分: 文件系统 API
查看>>
在SQL Server中使用种子表生成流水号注意顺序
查看>>
java多线程的等待唤醒机制及如何解决同步过程中的安全问题
查看>>
更快的AtomicInteger
查看>>
iOS 自定义步骤进度条
查看>>
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下
查看>>
iOS基础控件之UISegmentedControl
查看>>
【SSH项目实战】国税协同平台-3.资源文件分类&amp;log4j&amp;抽取BaseAction
查看>>
《Redis官方教程》-基准测试
查看>>
C++之继承
查看>>
一分钟了解阿里云产品:E-MapReduce五大热点技术问题分析
查看>>
Servlet处理客户端HTTP请求
查看>>
TFS ErasureCode线上问题
查看>>
Less mobile, more everything-重新思考Mobile
查看>>
Android反编译工具Apktool浅析
查看>>
重学js之JavaScript基本概念(上)=> 数据类型
查看>>
C++ 类模板
查看>>
使用Travis+github+hexo持续部署博客项目
查看>>
JS监听手机物理返回键(及IOS微信端的bug)
查看>>