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

本文共 1854 字,大约阅读时间需要 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秒多钟。

转载于:https://www.cnblogs.com/Zzz-/p/10476411.html

你可能感兴趣的文章
英语单词
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>
新手Python第一天(接触)
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
codevs 1080 线段树练习
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>