分类目录: 数码硬件

基于Dlib、Flask和Sqlite的人脸检测和识别服务

这个十一原定的计划取消了,没有做好备份计划,也就不打算出远门了,关在家里,把一直都想做的一个本地化的人脸识别服务整了一下。提供人脸分析的开源服务似乎很多年都没有大的变化了,一直都是Dlib和OpenCV,对比了一下,Dlib更容易使用。一直没有正经写过Python代码,翻出N年前买的Python编程书,边翻书Google、边写代码。基本的代码流程比较简单,Dlib官方也有例子,很容易运行起来,但是要服务化,要做人脸比对,并且是增量的人脸比对和识别,并不容易。说做就做,最终整个服务形成如下架构。

架构图:
image

代码和部署使用方法在如下git工程:https://git.codefine.site:3000/Shentar/facerec

首先需要将探测的过的“人脸”存储起来,然后能输入一张人脸返回与该人脸近似的所有人脸,这样客户端好做人脸归集。很快做好了一个初步的框架:使用Flask提供REST接口接收照片,在响应中返回人脸的特征标识,使用SHA256对人脸68点位的描述向量进行HASH,返回给客户端。同时将HASH值和实际的token存储到Sqlite。第一天大概就完工了这个功能。

运行起来,发现单纯的Flask不能并发,第二个请求会报错,一次只能接受和处理一个请求。于是又按照网上的经验,使用Gunicorn和Gevent来做多线程的方案,因为习惯了单进程多线程的方式,多线程访问Sqlite需要加锁,按照通用的做法,使用一个队列来管理Sqlite实例。继续验证,发现多线程并不能加速Detect的效率,貌似Dlib不支持多线程加速。调整为多进程,四个CPU都能运用起来。

1d2dd2b5bcde40b6a563996821d84843

终于找到了一个能将这个3.2GHZ的四核CPU跑满的业务了 ^_^

Architecture: x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              2
Core(s) per socket:              2
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           94
Model name:                      Intel(R) Core(TM) i3-6100T CPU @ 3.20GHz

人脸检测的效果还不错,错误率的话,自己家用是够了。特别是在侧脸检测上面,比较准确。在人脸比对方面,错误率就要高一些了,反复验证,发现0.36的比对阀值比较合适。侧脸虽然检测率高,但是在比对上面,只用通用的拟合范数,结果会表现为差异很大。因此这里应该是需要有定制化的比对实现,只做部分比对。这块需要深入到人脸检测技术内部,去分析128D的特征值向量的每一个值,短时间内没办法去研究透了。

由于采用了多进程,因此没法共用一个Sqlite运行时实例,强行并发读写访问会导致数据库错乱,不得不又做了一个服务来封装Sqlite,多个检测进程输出的人脸特征值都发给该服务来顺序存储,同时也返回给客户端。两个服务之间同样采用REST接口交互。

准备大规模上量,将jAlbum目前使用的线上人脸识别服务切换到这个本地服务上面,又发现检测时长非常高,一张4M的图片,大概需要几秒的时间,并且还有些非常小的区块被检测到了。对于检测慢的问题,考虑降低输入的照片的像素,图片减小后,长宽的像素点都相应减少了,但是人脸的特征点并不会损失太多。因此先对图片进行降低像素和尺寸,识别完成后,对识别到的人脸在照片上的位置也要相应做缩放,对比了一下,原始大小检测和缩放后检测,再对结果做相反的缩放,最终结果误差不大,但是这样能极大提速。对于非人脸和质量不高的人脸被检测到的问题,做了一些粗浅的限制,人脸长宽必须大于100的阀值才认为是正常的人脸。Dlib应该有正统的输出人脸的质量的参数,查了很久,没有找到合适的方法,就只能先这样吧。在比对方面,还有一些重要的概念,没有弄明白,如人脸对齐、年龄、性别检测等,不清楚我的代码里面是否已经有调用已经做了这块。

具体的处理代码:

data = np.frombuffer(data, np.uint8) 
if data is None: 
    raise Exception('image is required.') 

zoom_ratio = 1 
if data.size > 6 * 1024 * 1024: 
    img = cv2.imdecode(data, cv2.IMREAD_REDUCED_COLOR_4) 
    zoom_ratio = 4 
elif data.size > 4 * 1024 * 124: 
    img = cv2.imdecode(data, cv2.IMREAD_REDUCED_COLOR_2) 
    zoom_ratio = 2 
else: 
    img = cv2.imdecode(data, cv2.IMREAD_COLOR) 

faces = [] 
dets = detector(img, 1)

总的来说,开源项目,适合做一下Demo,如果要尽善尽美,那么就要深入到源码,有针对性的去优化检测和比对模型。作为个人的实验和家用还是很不错的。至少在快速编程和服务化这方面。

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 同时归档在:WEB网络, 架构设计, 移动互联, 软件应用 | 标签: , , , , , |

Ubuntu 20.04桌面体验

对于Ubuntu桌面的印象还停留在很多年前,当年的感觉是,比较容易崩溃,需要修改配置文件的地方太多,一不小心系统就崩溃了。家里近10年前的笔记本,几次操作系统自动升级后,已经变得一打开Win10系统就开始呼呼叫。像是一个年迈的老人,稍微快步走路就气喘一样。想试一下最新的Ubuntu,装系统很容易,直接下载镜像,写入U盘,制作成启动盘,引导安装。最可贵的是,居然自动识别老的Win10系统,做成了双系统,需要的时候还能进入Win10。用了几天,感觉Gnome桌面的整体风格跟Mac越来越像了,几乎不需要手动修改配置。自动发现U盘、界面连接Wifi、安装软件等体验都不错。其实日常家里使用笔记本也就是看看文档、浏览网页、看看开源代码,还有一些常用的社交应用的网页版,无缝访问家里的NAS系统。Ubuntu生态里面,离完全满足这些应用还有距离,但是在性能体验上面,已经远远超出Windows了,特别是硬件资源不足的情况。生态欠缺也是硬伤,如:微信微博等没有linux版本客户端,没有一些通用的轻量级代码编辑器:Nodepad++和VSCode等。好在现在越来越多的东西都可以在Web页面上解决。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 同时归档在:软件应用, 软件技术 | 标签: , |

Home NAS上可以运行哪些有趣的服务?

一、jAlbum

“自研”的相册管理程序,介绍和部署方法参考《jAlbum——Java WEB版相片管理系统 》。

二、代码托管服务器

国内访问github总是非常慢,所以把代码托管到HomeNas上面。使用gogs

三、文件备份工具

接收各个终端上面备份的视频、照片文件。使用sync搭建,目前墙内无法访问该工具的官方网站。现在有开源免费的替代方案:Syncthing

四、Everything

everything本来是一个Windows系统的本地文件搜索工具,以其高效而著称,在IT从业人员中使用非常广泛。其开放WEB访问方式,支持远程搜索和下载文件,远程办公时访问HomeServer上面的文件非常方便。遗憾的是,至今其都不支持HTTPS方式访问,并且用于认证的用户密码机制非常原始。可能是作者为了保持该软件的健壮和简单,不愿意加入更多的小众化功能。

五、Emby Server

媒体管理平台,支持各大平台部署Server端,支持众多的终端部署客户端应用。免费版本的客户端限制较多。当然网上也流传着各种破解方法。 在HomeServer上面部署Emby主要用于管理电视剧、小孩子看的动画片、无损音乐和超清电影,没有广告干扰的娱乐时光还是很惬意的:) 其中电影自动搜索字幕比较有用。但是对于非电影文件,按照电影去搜索元数据时,会出现匹配错乱的问题,因此非电影文件的库都是禁用自动更新元数据。

六、RSSHub

这年头,RSS源越来越少了,只能自行部署一个RSSHub,目前主要用这个工具的客户端快速提取正在访问的网页中的RSS Feed。服务端能起的作用似乎还有限,也可能是还没有完全整明白这个该怎么用。

七、博客静态文件托管服务

在香港的一个主机提供商那里购买的丐版空间,只有1G的文件存储容量,博客中日积月累的各种图片和PDF已经将空间耗尽,还有Reader和博客的数据库文件其实也是分享的这1G的空间,而各大公由云的对象存储又收费,想着家里的NAS每天开机也是闲着,就再承担点负载。将网站的所有静态文件都从“自研”的托管服务上面出,模拟主流对象存储的API实现了类似镜像存储的机制。将所有图片本地保存。这样可以定期清理博客托管服务服务上面的图片和附件等。 当然还有最基本的NAS文件共享服务、远程访问服务、偶尔当梯子给其它终端代理、作为下载机等普通功能都不在话下。 不知不觉家里一个小小的Server上都部署了十来个服务。其实,HomeServer就缺了一个完整的80和443等端口,如果国内电信服务提供商开放这些端口,那么都不用购买任何网站托管服务了,直接在HomeServer上面运行所有网站相关的任务。这样不仅省钱,还便于管控。不过话也说回来,电信封了很多端口,对HomeServer的维护来说,也解决了网络安全的问题。

八、WebDAV服务

2020-8-9更新:增加WebDAV服务,使用go编写的caddy和webdav插件搭建。主要服务于跨平台的笔记服务:Joplin,除了界面不如印象笔记,功能上已经够用。有了WebDav,能做的事情就比较多了,如: 1、管理个人密码的keepass; 2、备份油猴配置和脚本; 3、当作网盘直接在桌面系统中挂载使用。

九、Cockpit服务

2020-8-27更新:增加cockpit服务,并替换自签名证书。

十、部署VMPlayer

用于运行两个虚拟机: 一个是Win10系统:1、用于搭建科学上网的客户端,给其他设备提供代理服务,科学上网这块在Win生态下的工具远比Linux系列的丰富和易用。这样不用每个终端都安装各种工具,只需要配置代理指向该Win系统即可。2、安装迅雷,现在下载没有迅雷,啥资源都是Kbytes/s的速度,难以忍受,毋庸置疑,资源都已经被迅雷垄断了,迅雷充当了CDN的作用。 另外虚拟化了一个黑群晖,主要用于体验群晖系统,其实群晖能做的事情,在这个HomeNAS上面都有了,只是想体验一下群晖的易用性。惊奇的发现,在虚拟机里面虚拟化出来的磁盘(600GB),磁盘落在EXT4文件系统上面,然后再经过群晖的文件共享出来使用,这个共享跟NAS上面原来的共享在性能上面没有任何差异,甚至更稳定,写速率稳定在112MB/s,是不是经过Vmware和EXT4文件系统两级缓存之后,速度跟均衡。装一个空壳的宿主机,把所有硬盘都交给虚拟机的黑群晖管理,也不失为一种新的NAS玩法。

十一、部署Docker

安装docker,并配置远程访问,dockerd监听本地端口,配置TLS证书。运行portainer,实现远程管理docker实例。运行wiz笔记程序,体验不同于joplin风格的为知笔记,该笔记在抓取网页方面有所欠缺,但是界面还有性能上面非常不错。

十二、人脸识别服务

参考《基于Dlib、Flask和Sqlite的人脸检测和识别服务》。

十三、FileRunFileBrowser

可以将HomeNAS瞬间变网盘,主要用于解决文件分享、带校验码分享的场景。另外也可以用这个来直接通过页面操作远端文件的增、删、改、查。参考链接安装 FileRun,HomeNAS 秒变网盘

十四、Grafana

使用docker部署Grafana、普罗米修斯和Node-exporter监控服务器的磁盘、CPU、内存和网络等消耗。

十五、Chevereto图库服务

部署图库服务,可以作为图床、相册等使用。简单高效管理图片。

十六、为知笔记

一个界面非常友好,功能强大的多设备、多用户,跨网络同步的笔记服务。

十七、RSS阅读器

参考《架设Tiny Tiny RSS(TTRSS)阅读器,找回Google Reader!

十八、自研爬虫

运行各种新闻和电影BT下载爬虫程序。

十九、音乐服务

参考《Home NAS 音乐服务解决方案

二十、在线电子书库

安装基于Calibre的电子书在线阅读和管理服务:源码Docker仓库,本站书库:代码人生

二十一、MinIO

自托管的对象存储服务,兼容Amazon S3。安装指导:链接

二十二、Transfer.sh

一个非常好用的临时文件共享服务,客户端和服务端均使用最简洁的HTTP请求上传下载文件。可在此试用本站的Transfer.sh服务:链接

二十三、Matomo

非常好用的站点统计工具,Google Analytics的自建替代品,自建站点统计服务。对于Wordpress博客,甚至可以直接使用插件集成所有服务端的功能。

二十四、OnlyOffice

在线Office,可以完全替代本地的Office。官网的文档介绍太弱,安装过程中有一些坑,并且官方提供的镜像太臃肿,我做了少量精简。安装过程总结如下:《HomeServer安装在线Office:Docker安装最新精简版OnlyOffice》

服务列表

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 同时归档在:WEB网络, 建站技术, 移动互联 | 标签: , , , , , , , , , , , , , , |

分享一个树莓派延时摄影和视频制作代码

心血来潮,想着做一个阳台花草生长的延时视频。阳台上正好有个树莓派,只需要一个摄像头即可。说做就做,500万像素的树莓派摄像头,包邮只需要30元。基本够够用了。接好线,固定好摄像头位置。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 同时归档在:实用脚本, 软件应用 | 标签: , , , |

2017年10大热门卡片电脑

外媒给出的2017十大热门卡片电脑,大多数在淘宝都能找到销售链接。根据实际需求选取合适的卡片电脑,花最少的钱又刚刚好解决问题,是最大的乐事了。

1. Raspberry Pi Zero W — $10

pi-zero-w

基本上是目前市面上最便宜的卡片电脑了。支持Wifi和蓝牙无线连接。可以运行任意Linux系统。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 4票) Loading ... Loading ... | 归档目录:数码硬件 | 标签: , , , |

如何hack一台下电的电脑——借助于Intel ME运行未授权的代码

PDF下载链接

image

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:数码硬件 | 标签: , |

家用NAS组网

不满足于之前的树莓派搭建的HOME NAS,又折腾了一套X86的低功耗版NAS服务器,将之前放在硬盘盒里面的硬盘都规整到了NAS服务器内。直接安装Windows Server 2012版本,配置简单。

不断增加网络设备,突然发现家里的网络越来越复杂,首先把家里的网络设备连接图整理出来记录一下。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 5票) Loading ... Loading ... | 同时归档在:WEB网络, 移动互联 | 标签: , , |

漫谈SSD原理与应用实践PDF–新浪杨尚刚

漫谈SSD和应用实践

| 1 分2 分3 分4 分5 分 (4.56- 9票) Loading ... Loading ... | 同时归档在:存储技术 | 标签: , |

Intel芯片架构和指令集演化

从芯片架构谈系统优化

下载地址:《从芯片架构盘系统优化》

| 1 分2 分3 分4 分5 分 (5.00- 10票) Loading ... Loading ... | 同时归档在:架构设计 | 标签: , , , , , , , , , , |

[转]MIPS、ARM、X86三大架构

转载自:中关村在线

 

费浙平:RISC领域ARM不是唯一

近两三年,随着手机,平板等智能移动平台的兴起,一个鲜为大众所知的平台逐渐的呈现在了世人的面前。这就是诸如像iPhone 4手机和XOOM平板设备所使用的RISC(精简指令集系统)平台。随着RISC技术的不断进步,这些精简指令系统的设计者也从幕后走到了台前,成为了电子爱好者们了解的对象。不久前,笔者有幸与RISC领域中的专业人士进行了一次深度的交流,从他那里了解到了不少鲜为人知的关于RISC领域的故事。今天笔者通过对这次交流的整理,为大家讲述一名RISC系统技术市场经理眼中的嵌入式系统发展未来。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.89- 9票) Loading ... Loading ... | 同时归档在:架构设计 | 标签: , , , , , , |
返回顶部