目录

前言

一、软件功能

1.添加/删除人脸库

2.添加/删除照片库目录

3.检索照片

4.新增加了:视频中人脸识别

5.新增加了:照片、视频播放器

二、开发中碰到的坑

1.DllImport调用问题

2.照片显示数量大而加载慢

总结



前言

家里存储的照片太多了,大概有4万多张,由于都是按照目录和时间管理的,现有目录又非常多(大概有近20多年的照片),所以基本很少翻看。希望能有一款支持人脸识别的照片管理工具,这样就看从大量照片中去查找照片,比如:可以查找照片中同时出现人物A、人物B、人物C的照片。自己去试用很多现成的软件,但都不符合我的需求,所以自己动手写了这个小工具。


一、软件功能

从C#写的支持人脸识别的本地照片管理工具,采用百度人脸识别离线SDK识别人脸,可管理十万级,具体功能:

1.添加/删除人脸库

自主选择包含人脸的照片进行标注,或者随机从照片库选择一张人脸照片标注。

2.添加/删除照片库目录

添加或删除管理的照片目录,会管理该目录下所有照片。

3.检索照片

支持人脸识别检索照片,最多可以同时选择三张不同的人脸进行交集检索。

4.新增加了:视频中人脸识别

增加了视频识别功能,支持支持照片(jpg,jpeg,png,bmp)和视频(avi,mp4,mpg,mpeg)的人脸识别、检索。

5.新增加了:照片、视频播放器

采用LVC库,增加了软件内对照片、视频的浏览,照片支持滚动放大、拖动;视频支持播放、进度条控制、音量控制等。

二、开发中碰到的坑

1.DllImport调用问题

采用DllImport的方式调用百度人脸识别离线SDK,发现如果跨线程调用该SDK中的函数,程序会莫名其妙的奔溃,调试后发现原因:尝试读取或写入 protected 内存。原因是DllImport调用的函数不能跨线程使用,所以我将所有涉及到百度人脸识别离线SDK的功能封装在一个线程(一个thread)中,这个线程始终循环等待命令,线程内的核心代码:

public class UpdatePhoto{public static bool running = false;public static ManualResetEvent signal= new ManualResetEvent(false);public static string function_name = "";public void run() {while (true){signal.WaitOne();signal.Reset();running = true;//TODOrunning =false;}}
}

需要调用该线程的时候,采用以下代码:

if (UpdatePhoto.running)
{MessageBox.Show("有其它操作正在进行,请等待完成,其它操作为:"+UpdatePhoto.cur_task_name);
}else
{UpdatePhoto.function_name = "update_undo_photo_face";UpdatePhoto.cur_task_name = "识别还未识别的照片人脸";UpdatePhoto.signal.Set();
}

2.照片显示数量大而加载慢

检索照片时,照片显示用ListView+ImageList,但是如果照片的数量很多,会造成ListView加载非常慢,并且由于需要读取照片缩略图,导致I/O非常大,由于IO瓶颈,照片缩略图显示非常慢。为此,首先我们采用事先计算好每张照片的缩略图(100*100),并把缩略图存储在sqlite数据库中,这样当需要展示缩略图的时候,就不需求要重复读取照片原文件再计算缩略图,这样就可以解决掉IO瓶颈的问题。其次,对于LiewView加载大力照片缓慢的问题,我们采用虚拟化的ListView。最后,加载缩略图时候我们单独开个线程来分批加载。代码如下:


private List<ListViewItem> ItemsSource = new List<ListViewItem>();
private void button1_Click(object sender, EventArgs e){List<string> face_name_list = new List<string>();if (comboBox1.Text != "") {face_name_list.Add(comboBox1.Text);}if (comboBox2.Text != "" && comboBox2.Text != "--不选择--"){face_name_list.Add(comboBox2.Text);}if (comboBox3.Text != "" && comboBox3.Text != "--不选择--"){face_name_list.Add(comboBox3.Text);}if (face_name_list.Count==0){MessageBox.Show("请至少选择一个人物名称。");return;}face_name_list.Sort();string key_word = "";foreach(string word in face_name_list) {key_word = key_word + "["+word+"]";}imageList1.Images.Clear();listView1.Items.Clear();listView1.LargeImageList = imageList1;listView1.View = View.LargeIcon;PhotoView.file_path_list.Clear();imageList1.Images.Clear();listView1.Items.Clear();listView1.LargeImageList = imageList1;listView1.View = View.LargeIcon;param.Clear();param.Add(new SQLiteParameter("@face_name", key_word));//MessageBox.Show("!");DataTable dt = slh.ExecuteQuery("select b.path,b.image,b.to_delete from photo_file b,photo_facename a where a.face_name = @face_name and a.file_id=b.id order by b.shooting_time desc", param.ToArray());//MessageBox.Show("2");PhotoView.file_path_list.Clear();ItemsSource.Clear();Bitmap common_bitmap = new Bitmap(100, 100);/* if (dt.Rows.Count >= 1000) {MessageBox.Show("查询结果超过了1000张,本次随机显示1000张。单击查询,可再次随机显示其它照片");}*/if (dt.Rows.Count == 0){MessageBox.Show("没有搜索到有关的照片!");}else {MessageBox.Show("共搜索有关照片"+dt.Rows.Count+"张!");}for (int i = 0; i < dt.Rows.Count; i++){if (dt.Rows[i][1] == null) continue;//if ((bool)dt.Rows[i][2]) { continue; }ListViewItem lvItem = new ListViewItem();lvItem.Tag = dt.Rows[i][0].ToString();lvItem.ImageIndex = ItemsSource.Count;lvItem.Text = (ItemsSource.Count + 1)+"";ItemsSource.Add(lvItem);//imageList1.Images.Add( common_bitmap);imageList1.Images.Add(System.Drawing.Image.FromStream(new MemoryStream((byte[])dt.Rows[i][1])));PhotoView.file_path_list.Add(dt.Rows[i][0].ToString());} setStatusBar("状态:共检索到" + ItemsSource.Count + "张相关照片!");listView1.VirtualListSize = ItemsSource.Count;}void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e){if(ItemsSource==null || ItemsSource.Count == 0){return;}e.Item = ItemsSource[e.ItemIndex];}

总结

如果需要下载本软件,请访问我在CSDN上发布的资源。

使用C#实现支持人脸识别的本地照片管理工具相关推荐

  1. 华为畅享max有没有人脸识别_华为畅享Z有指纹识别吗?支持人脸识别解锁吗

    指纹识别可以说是近几年来智能手机的标配,而且也有很多机型采用了人脸识识别和指纹识别的双重解锁方案.那么华为畅享Z有指纹识别吗?支持人脸识别解锁吗.下面小编就来为大家详细解答一下,一起来看看吧! 华为畅 ...

  2. 华为畅享max有没有人脸识别_华为畅享9s支持人脸识别吗 人脸解锁可以这样设置...

    华为畅享9s是华为畅享系列在3月份发布的一款千元机,在配置方面,华为畅享9s的亮点功能之一就是采用了后置三摄设计,当然了,大家对于华为畅享9s的功能也是比较关注的,具体华为畅享9s是否支持人脸识别功能 ...

  3. nokia 7 Android8,诺基亚 7获升Android 8.1:终于支持人脸识别

    诺基亚手机的系统更新速度向来都十分快速,目前绝大部分诺基亚手机都已经升级到了Android 8.0 Oreo版本,其中也有一部分已经升级到了Android 8.1. 近日,诺基亚宣布,即将推送诺基亚 ...

  4. Python简单实现人脸识别检测, 对照片进行评分

    大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...

  5. 人脸识别智能门禁成为流动人口管理、访客管理好帮手

    随着中国改革开放进程的不断推进,经济高速发展,城市化速度越来越快,城市人口越来越多,规模不断扩大,大量涌进的流动人口,给城市管理者和社会安全管理带来新的问题. 伴随着人们社交和工作的需要,生活上和商务 ...

  6. 人脸识别系统具有哪些管理功能

    人脸识别系统是一个具有名单管理,资源管理,布控管理,任务管理的多功能系统,主要功能有: 1)名单管理. 对名单库及库内名单进行管理.支持用户新增.修改.删除名单库,也可以对库内名单进行新增.修改.删除 ...

  7. 微软旷视人脸识别100%失灵!照片「隐身衣」,帮你保护照片隐私数据

    本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处. 左图,右图,你能看出区别吗? 其实,算法已经悄悄给右边的照片加上了微小的修改. 但就是这样肉眼根本看不出来的扰动,就能10 ...

  8. 防沉迷人脸识别可以扫照片吗_人脸识别的智能门锁到底安不安全?用照片可以打开是真的吗?...

    随着人脸识别技术不断成熟发展,市场需求加速释放,应用场景不断被挖掘,多方的推动使得人脸识别锁备受青睐.人脸识别精度的提高,使得人脸识别智能锁具有高便捷性,强实用性等特点.因此,近年来这种门锁成为了越来 ...

  9. 人脸识别(通过照片库区别人物)

    /* 人脸的学习性识别,学习网址: http://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_api.html#facerecogn ...

最新文章

  1. 最常用 150 个Linux命令汇总(建议收藏)
  2. ConcurrentHashMap源码解析(1)
  3. C++实现有序表折半查找
  4. 使用母版頁是內容如何使用CSS和javascript(轉)
  5. python程序设计第一章答案_Python《学习手册:第一章-习题》
  6. 糖果(信息学奥赛一本通-T1299)
  7. 随心所欲的DateTime显示格式
  8. Android 功耗(13)---sleep和suspend
  9. 马斯克疯狂套现,特斯拉市值一周蒸发1895亿美元!网友:丝毫不影响首富位置...
  10. 谈FTP服务器***技术及其展望 (下)
  11. VSS 2005,项目解决方案重新签入管理的方法
  12. VMware Workstation 的 MacOS 解锁补丁 Unlocker 3.0.4
  13. 利用Power Design 进行数据库设计(超详细)
  14. 新手如何学习网络安全?
  15. 扫描电子显微镜SEM在失效分析中的应用
  16. MySQL使用JDBC高级操作和事务
  17. Vue制作图片翻面效果
  18. 浅谈Android Architecture Components
  19. 期刊模板-如何去除左下角的横线
  20. 它们改变了整个世界 盘点50个最伟大的游戏创意

热门文章

  1. 2019.11.4 英语学习
  2. Cisdem PDF Converter OCR for Mac(PDF文字识别转换工具)
  3. MFC Rect 的详解
  4. Python读取tsv文件数据
  5. IOS界面push跳转后navigationController不显示
  6. PCI-E的针脚定义的简单讲解(备忘)
  7. Orz这个词的复杂意思[z]
  8. 商超霸主之争:天猫节节败退 沦为京东陪练
  9. MSD3393/MSD3463 屏参及REG对照表
  10. stm32f429之多通道ADC通过DMA数据采集