# CameraBot **Repository Path**: cooltools/CameraBot ## Basic Information - **Project Name**: CameraBot - **Description**: 人脸识别,自动拍照机器人 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2017-11-14 - **Last Updated**: 2024-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CameraBot 人脸识别,语音提示,自动拍照机器人(基于DragonBoard 410c开发板) ## 项目简介 应用于景区、商场、展会等有大量游客(或顾客、观众,以下统称游客)的地方,在热门的景点、背景前放置自动照相机器人,语音招揽过往行人,帮助游客拍照,通过人脸识别确定何时抓拍,拍好后在屏幕上(立在机器人旁边)生成二维码,游客扫二维码获取电子照片。 ### 使用第三方库: 人脸识别使用的是[face++](https://console.faceplusplus.com.cn/documents/5671789/),语音合成使用的是[讯飞在线语音合成](http://www.xfyun.cn/services/online_tts),照片存储用的是七牛云,采集视频信息[SimpleWebCam](https://gitee.com/cooltools/SimpleWebCam),二维码生成[BGAQRCode-Android](https://github.com/bingoogolapple/BGAQRCode-Android) ### 项目流程: **1.项目运行后,每隔一段时间会有语音提示游客是否需要拍照,** ``` int result = synthesizer.speak("大家好,需要拍照吗?我可以给你们拍哦"); ``` **2.如果检测到人脸出现在屏幕内([CamerBotActivity](https://gitee.com/cooltools/CameraBot/blob/master/app/src/main/java/erabbit/net/camerabot/CamerBotActivity.java)),则会提示游客10秒倒计时后开始拍照** > 其实SimpleWebCam返回给我们的视频信息也是一帧一帧的Bitmap,通过回调函数的形式将Bitmap对象传递给face++提供的检测人脸接口。 ``` byte[] dataT = ConUtil.getGrayscale(bitmap); //faces数组的长度就是识别出的Bitmap上人脸数量,长度大于零说明检测到人脸 Facepp.Face[] faces = facepp.detect(dataT, bitmap.getWidth(), bitmap.getHeight(), Facepp.IMAGEMODE_GRAY); ``` > 同样的,这里并没有额外的“拍照”过程,10秒倒计时后只是将此时传递过来的Bitmap对象添加水印效果后保存为图片文件。 **3.拍照完后会跳转到[照片查看界面](https://gitee.com/cooltools/CameraBot/blob/master/app/src/main/java/erabbit/net/camerabot/ShowImageActivity.java)并将游客照片上传至七牛云,** ``` //上传图片到七牛云 MyApplication.uploadManager.put(file, null, TOKEN, new UpCompletionHandler() { @Override public void complete(String key, ResponseInfo info, JSONObject res) { //res包含hash、key等信息,具体字段取决于上传策略的设置 if (info.isOK()) { //上传完成 progressBar.setVisibility(View.GONE); } else { Log.i(TAG, "Upload Fail"); //如果失败,这里可以把info信息上报自己的服务器,便于后面分析上传错误原因 } Log.i(TAG, key + ",\r\n " + info + ",\r\n " + res); } }, new UploadOptions(null, null, false, new UpProgressHandler() { public void progress(String key, double percent) { Log.i(TAG, key + ": " + percent); progressBar.setProgress((int) (percent * 100)); } }, null)); ``` **4.获取到七牛云照片地址后会生成一张带游客图片的二维码显示在照片查看界面,游客扫描二维码可查看并下载照片。** ``` QRCodeEncoder.syncEncodeQRCode(url, 200, Color.parseColor("#00FFFF"), bitmap) ``` **5.在15秒后将自动从照片查看界面回到人脸识别的界面,并重复上述过程。**