11RIA 闪客社区 - 最赞 Flash 论坛

搜索
查看: 1954|回复: 20
上一主题 下一主题

[算法 & 公式] 分分钟学会【AS3人脸识别】~~~~~~~【猪八戒的嫦娥梦】

[复制链接] TA的其它主题
发表于 2018-11-5 17:41:36 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2020-2-4 11:08 编辑

TKCB网站
网址:www.tkcb.cc




QQ截图20181105173931.png


教程开始了!
很多高手、大神都曾经讲过AS3人脸识别,但小弟不才,也想献上一篇AS3人脸识别的文章,以供观赏。本人系AS3菜鸟一枚,文章有不足之处,敬请包涵理解。

其实就是调用别人的API和识别库,但再简单的东西,如果没有被分享出来,也是复杂的!

很多人都说人脸识别有什么用,而且AS3也仅仅是检测出人脸并不能做出人脸比对~那这个功能又有什么用呢?

我来举几个例子:
1. QQ空间的右侧时常有一些好友的相册照片,照片中会出现一个框识别出人脸,问道这是谁?有没有印象呢?
2. 百度、搜搜街景地图里面所有的人脸都要做模糊处理,那么谁来做呢?我觉得不可能完全是人吧,或许全部都是程序计算进行的模糊处理。
3. 你电脑中有很多相片,你想回忆一下这些照片,但只想看一些有人的图片,怎么办?人脸识别或许能帮得上你!

既然人脸识别有点小用,那么教程便开始了。


猪八戒的嫦娥梦
序章,你还在看帖子?你妈叫你回家吃饭了。

第一章,突然你意识到了不对劲,哪里不对劲呢,原来你不再是你,你是无所不能的上帝,万能的上帝啊,你在电脑那头,我们再电脑这头。

第二章,有事起奏,无事退朝。报告上帝,你家后院养的那头猪成精了(他自称天蓬元帅猪八戒),他请求你赐给他一个美女,不然他就要将你与他的秘密告诉所有人,包括我们!

第三章,上帝大怒,尔敢!但无奈这个秘密实在不能公开啊!这时候或许大家都在脑子里脑补这个不可告人的秘密是什么。

第四章,西方的天界有一个不可告人的秘密,没人女人!怎么办呢,猪八戒又要美女~~于是作为上帝的你只要拉下脸皮向东方天庭求助,借嫦娥一用,当然上帝不可能告诉玉帝实情了,各种遮天蔽日的手段无所不用其极。

第五章,上帝想出了一个办法,就是蒙着猪八戒的双眼,让他距离八位嫦娥(只有一位是真嫦娥,其他都是妖怪变化出来的假嫦娥)100米,然后让他选,他选中那个就是那个了,不准后悔,限时一炷香的时间。

第六章,猪八戒想了想同意了,因为他也不愿将这个不可告人的秘密随意公开。

第七章,选嫦娥开始了,猪八戒先放出神识想直接窥探,可没想到上帝居然屏蔽了他的神识!!!怎么办呢?怎么办呢?猪八戒万分焦急!!!

第八章,猪八戒摸了摸口袋,超声波探测器,有办法了,猪八戒掏出了超声波探测器,释放出了上帝也无法左右的超声波,只有短短几毫秒,一张清晰的图像便出现在了八戒的脑海中了。

第九章,人脸识别,只要找出是人的那张脸就可以了,其他都是妖怪!八戒用他高达2.50的智商不断分析识别着。

第十章,八戒消失了,嫦娥消失了,西方天界又恢复了一片平静,上帝和玉帝之间似乎有一些不同寻常的事情发生,但对于我们常人却没有影响。

第十一章(妖界传说),猪王猪八戒带着娇妻嫦娥,以及后宫佳丽三千万隐居于桃花源,过着幸福和谐的生活,桃花源是一个传说,谁也不知道这个地方在哪里。

第十一章(天界传说),自从嫦娥消失后,玉帝与上帝之间往来频繁,似乎他们成为了好基友。但在这两位大帝的打压之下,这种言论很快变成了一个传说。

第十一章(基情天下),男欢女爱的时代结束了,基友的天下来临了,但随着人口的下降,人类灭绝了(2012只是预言的刚开始)。


程序员猪八戒
人间有一个程序员,他叫做猪八戒,他精通AS3人脸识别,他听闻了天界猪八戒的传说,很感兴趣,于是他准备用程序模拟一下人脸识别。
下面是程序方面的知识(相对枯燥,耐心开下去吧):

提供的 API 有 deng jp 两个包,以及face人脸识别库

deng 包里面是ZIP压缩包相关的代码类,jp 包里面是关于人脸识别相关的代码类
QQ截图20181105173854.png
face压缩文件里面存放着人脸识别相关的库数据
QQ截图20181105173903.png

代码调用流程大致如下:

1. 创建人脸识别类对象(ObjectDetector);

2. 设置人脸识别识别选项(ObjectDetectorOptions);

3. 加载人脸识别库(face.zip);

4. 设置人脸识别完成侦听(ObjectDetectorEvent.DETECTION_COMPLETE);

5. 调用人脸识别方法(ObjectDetector.detect());

6. 获取人脸识别完成的结果(event.rects(方框对象数组));

7. 显示方框。


文档类(调用)代码如下:

  1. /*
  2. * 修 改 者:TKCB
  3. * 作者信息:身高(167cm+);体重(60kg±);年龄(90后);籍贯(陕西西安);星座(双鱼座);血型(O型);人生格言(The king come back.)。
  4. * 交流学习:加QQ群[AS3殿堂之路](96759336),群里有无数主城、架构、妹子、LOL战友,欢迎交流讨论。
  5. * 联系方式:QQ(2414268040);E-mail([url=mailto:tkcb@qq.com]tkcb@qq.com[/url]);手机(15029932353)。
  6. */

  7. package
  8. {
  9.         import flash.display.Graphics;
  10.         import flash.display.BitmapData;
  11.         import flash.display.Bitmap;
  12.         import flash.display.MovieClip;
  13.         import flash.display.Sprite;
  14.         
  15.         import flash.events.TimerEvent;
  16.         import flash.events.Event;
  17.         
  18.         import flash.utils.Timer;
  19.         
  20.         import flash.media.Video;
  21.         import flash.media.Camera;
  22.         
  23.         import jp.maaash.ObjectDetection.ObjectDetector;        
  24.         import jp.maaash.ObjectDetection.ObjectDetectorEvent;        
  25.         import jp.maaash.ObjectDetection.ObjectDetectorOptions;        
  26.         
  27.         /**
  28.          * ...
  29.          */
  30.         public class WebcamFaceDetector extends MovieClip
  31.         {
  32.                 //************************ ************************* 属  性 ******************** *********** *** **////
  33.                 /** 人脸识别对象 */
  34.                 private var detector : ObjectDetector;
  35.                
  36.                 /** 人脸识别对象选项(模式) */
  37.                 private var options : ObjectDetectorOptions;
  38.                
  39.                 /** 当前用于人脸识别的图像 */
  40.                 private var bmpTarget : Bitmap;
  41.                
  42.                
  43.                 /** 人脸识别,矩形框的颜色 */
  44.                 private var rectColor : int = 0xFF0000;
  45.                
  46.                 /** 人脸识别,矩形框的数组 */
  47.                 private var rects : Array;
  48.                
  49.                
  50.                
  51.                 //************************ ************************* 构造函数 ******************** *********** *** **////
  52.                 /**
  53.                  * 构造函数
  54.                  */
  55.                 public function WebcamFaceDetector ()
  56.                 {
  57.                         // 人脸识别,矩形框的数组
  58.                         rects = new Array();
  59.                         
  60.                         this.addEventListener( Event.ADDED_TO_STAGE, addedToStage );
  61.                 }
  62.                
  63.                
  64.                 //************************ ************************* 方  法 ******************** *********** *** **////
  65.                 /** 对象被添加到舞台 */
  66.                 private function addedToStage ( eve:Event ) : void
  67.                 {
  68.                         this.removeEventListener( Event.ADDED_TO_STAGE, addedToStage );
  69.                         
  70.                         // 初始化人脸识别器
  71.                         _initDetector();
  72.                         
  73.                         // 人脸识别
  74.                         _detection();
  75.                 }
  76.                
  77.                 /** 初始化人脸识别器 */
  78.                 private function _initDetector () : void
  79.                 {
  80.                         detector = new ObjectDetector();
  81.                         // 设置人脸识别识别选项(模式)
  82.                         options = new ObjectDetectorOptions();
  83.                         options.min_size = 50;
  84.                         options.startx = ObjectDetectorOptions.INVALID_POS;
  85.                         options.starty = ObjectDetectorOptions.INVALID_POS;
  86.                         options.endx = ObjectDetectorOptions.INVALID_POS;
  87.                         options.endy = ObjectDetectorOptions.INVALID_POS;
  88.                         detector.options = options;
  89.                         // 加载人脸识别库
  90.                         detector.loadHaarCascades( "face.zip" );
  91.                         // 设置人脸识别完成侦听
  92.                         detector.addEventListener( ObjectDetectorEvent.DETECTION_COMPLETE , detectionComplete );
  93.                 }
  94.                
  95.                 /** 人脸识别 */               
  96.                 private function _detection () : void
  97.                 {
  98.                         bmpTarget = new Bitmap( new BitmapData( rlsbMC.width, rlsbMC.height ) );
  99.                         bmpTarget.bitmapData.draw( rlsbMC );
  100.                         detector.detect( bmpTarget );
  101.                 }
  102.                
  103.                 /** 识别完成,用矩形框将识别到的人脸显示出来 */
  104.                 private function detectionComplete ( eve : ObjectDetectorEvent ) : void
  105.                 {
  106.                         // 如果没有识别到人脸,则结束函数,不显示任何矩形框
  107.                         // 根据lenght属性可以知道,该识别系统可以识别多个人脸
  108.                         if ( eve.rects.length == 0 )
  109.                         {
  110.                                 tf.text = "没有识别到人脸!!!";
  111.                                 return;
  112.                         }
  113.                         
  114.                         tf.text = "识别到了 " + eve.rects.length + " 个人脸。";
  115.                         // 便利获取到的人脸数组
  116.                         for ( var i : int = 0; i < eve.rects.length ; i++ )
  117.                         {
  118.                                 // 如果发现人脸则创建矩形
  119.                                 rects[ i ] = createRect();
  120.                                 rects[ i ].x = eve.rects[ i ].x + rlsbMC.x;
  121.                                 rects[ i ].y = eve.rects[ i ].y + rlsbMC.y;
  122.                                 rects[ i ].width = eve.rects[ i ].width;
  123.                                 rects[ i ].height = eve.rects[ i ].height;
  124.                                 addChild( rects[ i ] );
  125.                         }
  126.                 }
  127.                
  128.                 /** 创建人脸识别框 */
  129.                 private function createRect () : Sprite
  130.                 {
  131.                         var rectContainer : Sprite = new Sprite();
  132.                         rectContainer.graphics.lineStyle( 2 , rectColor , 1 );
  133.                         rectContainer.graphics.beginFill( 0x000000, 0 );
  134.                         rectContainer.graphics.drawRect( 0, 0, 100, 100 );
  135.                         
  136.                         return rectContainer;
  137.                 }
  138.                
  139.         }
  140. }
复制代码



结束语
代码里的注释写的还算详细,基础好点的,看了文章,再看代码估计都能懂个七七八八了。

愿大家越来越厉害,愿我早已脱离菜鸟的头衔~~~我是一只小小鸟,怎么飞也飞不高!!!

愿大家都能找到属于自己的嫦娥~~~送所有程序猿~~~


源文件奉上:
游客,如果您要查看本帖隐藏内容请回复



免费是最昂贵的
银子还是要收的,因为 “免费的东西最昂贵” ,请深刻理解这句话的含义!!!


广告
QQ(TKCB):2414268040(欢迎和我聊天交流,有朋自远方来不亦说乎)
QQ群:96759336(AS3殿堂之路,Flash Animate AS3 AIR 技术交流)
QQ群:705730359(H5天路历程,HTML5 CSS3 JaveScript  技术交流)
QQ群:463560360(King系列软件分享交流,TKCB 出品的 King 系列软件分享、使用、交流、反馈等)
TKCB网站:www.tkcb.cc
官方技术论坛:www.11ria.com

本帖被以下淘专辑推荐:

发表于 2018-11-5 18:41:06 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2018-11-6 09:42:31 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2018-11-29 02:15:34 | 显示全部楼层
這個是很好的例子,學習一下。
回复

使用道具 举报

发表于 2018-11-30 08:19:49 | 显示全部楼层
真的吗                              
回复

使用道具 举报

发表于 2019-2-25 09:53:58 | 显示全部楼层
这是真的吗

点评

当然真的咯  详情 回复 发表于 2019-2-25 14:38
回复

使用道具 举报

 楼主| 发表于 2019-2-25 14:38:33 | 显示全部楼层

当然真的咯
回复

使用道具 举报

发表于 2019-2-25 18:33:46 | 显示全部楼层
非常棒非常棒非常棒非常棒
回复

使用道具 举报

发表于 2019-2-25 21:01:55 | 显示全部楼层
T大原创的吗

点评

恩,三个系列的故事,都是我原创的,Flash技术都是相互学习的,不可能全部原创。  详情 回复 发表于 2019-2-25 22:15
回复

使用道具 举报

发表于 2019-2-25 21:52:46 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

value(29483)、 闪闪红星(27679)、 15106221779(1273)、 勤奋的蜗牛(295)、 flashahz(25977)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. 勤奋的蜗牛(295)、、 C2. flashahz(25977) C3. baimeng(12460)

快速回复 返回顶部 返回列表