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

搜索
查看: 1463|回复: 19
上一主题 下一主题

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

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

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

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

x
本帖最后由 TKCB 于 2019-1-20 16:15 编辑

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. 显示方框。


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

package
{
        import flash.display.Graphics;
        import flash.display.BitmapData;
        import flash.display.Bitmap;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        
        import flash.events.TimerEvent;
        import flash.events.Event;
        
        import flash.utils.Timer;
        
        import flash.media.Video;
        import flash.media.Camera;
        
        import jp.maaash.ObjectDetection.ObjectDetector;        
        import jp.maaash.ObjectDetection.ObjectDetectorEvent;        
        import jp.maaash.ObjectDetection.ObjectDetectorOptions;        
        
        /**
         * ...
         */
        public class WebcamFaceDetector extends MovieClip
        {
                //************************ ************************* 属  性 ******************** *********** *** **////
                /** 人脸识别对象 */
                private var detector : ObjectDetector;
               
                /** 人脸识别对象选项(模式) */
                private var options : ObjectDetectorOptions;
               
                /** 当前用于人脸识别的图像 */
                private var bmpTarget : Bitmap;
               
               
                /** 人脸识别,矩形框的颜色 */
                private var rectColor : int = 0xFF0000;
               
                /** 人脸识别,矩形框的数组 */
                private var rects : Array;
               
               
               
                //************************ ************************* 构造函数 ******************** *********** *** **////
                /**
                 * 构造函数
                 */
                public function WebcamFaceDetector ()
                {
                        // 人脸识别,矩形框的数组
                        rects = new Array();
                        
                        this.addEventListener( Event.ADDED_TO_STAGE, addedToStage );
                }
               
               
                //************************ ************************* 方  法 ******************** *********** *** **////
                /** 对象被添加到舞台 */
                private function addedToStage ( eve:Event ) : void
                {
                        this.removeEventListener( Event.ADDED_TO_STAGE, addedToStage );
                        
                        // 初始化人脸识别器
                        _initDetector();
                        
                        // 人脸识别
                        _detection();
                }
               
                /** 初始化人脸识别器 */
                private function _initDetector () : void
                {
                        detector = new ObjectDetector();
                        // 设置人脸识别识别选项(模式)
                        options = new ObjectDetectorOptions();
                        options.min_size = 50;
                        options.startx = ObjectDetectorOptions.INVALID_POS;
                        options.starty = ObjectDetectorOptions.INVALID_POS;
                        options.endx = ObjectDetectorOptions.INVALID_POS;
                        options.endy = ObjectDetectorOptions.INVALID_POS;
                        detector.options = options;
                        // 加载人脸识别库
                        detector.loadHaarCascades( "face.zip" );
                        // 设置人脸识别完成侦听
                        detector.addEventListener( ObjectDetectorEvent.DETECTION_COMPLETE , detectionComplete );
                }
               
                /** 人脸识别 */               
                private function _detection () : void
                {
                        bmpTarget = new Bitmap( new BitmapData( rlsbMC.width, rlsbMC.height ) );
                        bmpTarget.bitmapData.draw( rlsbMC );
                        detector.detect( bmpTarget );
                }
               
                /** 识别完成,用矩形框将识别到的人脸显示出来 */
                private function detectionComplete ( eve : ObjectDetectorEvent ) : void
                {
                        // 如果没有识别到人脸,则结束函数,不显示任何矩形框
                        // 根据lenght属性可以知道,该识别系统可以识别多个人脸
                        if ( eve.rects.length == 0 )
                        {
                                tf.text = "没有识别到人脸!!!";
                                return;
                        }
                        
                        tf.text = "识别到了 " + eve.rects.length + " 个人脸。";
                        // 便利获取到的人脸数组
                        for ( var i : int = 0; i < eve.rects.length ; i++ )
                        {
                                // 如果发现人脸则创建矩形
                                rects[ i ] = createRect();
                                rects[ i ].x = eve.rects[ i ].x + rlsbMC.x;
                                rects[ i ].y = eve.rects[ i ].y + rlsbMC.y;
                                rects[ i ].width = eve.rects[ i ].width;
                                rects[ i ].height = eve.rects[ i ].height;
                                addChild( rects[ i ] );
                        }
                }
               
                /** 创建人脸识别框 */
                private function createRect () : Sprite
                {
                        var rectContainer : Sprite = new Sprite();
                        rectContainer.graphics.lineStyle( 2 , rectColor , 1 );
                        rectContainer.graphics.beginFill( 0x000000, 0 );
                        rectContainer.graphics.drawRect( 0, 0, 100, 100 );
                        
                        return rectContainer;
                }
               
        }
}






[/mw_shl_code]


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

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

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


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



广告
喜欢AS3、Flash、LOL的同学加我的QQ以及QQ群,讨论交流学习为主。
QQ(TKCB):2414268040(欢迎和我聊天交流,有朋自远方来不亦说乎)
QQ群(AS3殿堂之路):96759336
TKCB网站:www.tkcb.cc
官方技术论坛:www.11ria.com
群里有各种技术大神、主城若干,妹子无数,LOL、王者农药战友激情四射。

本帖被以下淘专辑推荐:

发表于 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 | 显示全部楼层
感谢分享!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

1367926921(962)、 the3rd(10437)、 陈近南(65)、 13240360340(16)、 sunarm_jk(49)

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

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. iloveas(18)、 C2. 1367926921(962)、 C3. sunarm_jk(49)

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