当前位置: 首页 > wzjs >正文

锦州网站建设hao123主页

锦州网站建设,hao123主页,怎么做网站卡盟,html游子吟网页制作代码需要源码请点赞关注收藏后评论区留言私信~~~ 人脸蕴含的信息量巨大,不管是青春还是年少,还是老年沧桑,都能体现出来,不过从人脸估算年龄估算年龄全凭经验,毕竟计算机无法根据固定框架判断年龄,那么计算机的…

需要源码请点赞关注收藏后评论区留言私信~~~

人脸蕴含的信息量巨大,不管是青春还是年少,还是老年沧桑,都能体现出来,不过从人脸估算年龄估算年龄全凭经验,毕竟计算机无法根据固定框架判断年龄,那么计算机的经验从何而来呢?当然是要人类把经验传授给它,这种经验在机器学习领域称作模型,通过海量的原始样本训出结果模型,然后由计算机依据模型执行辨别操作

一、根据人脸估算性别和年龄

在App工程中使用年龄模型和性别模型需要按照以下步骤处理

(1)导入年龄模型文件,以及性别模型文件。

(2)把assets目录下的模型资源复制到存储卡。

(3)在代码中初始化年龄模型和性别模型。

(4)根据模型网络对人脸矩阵分别猜测年龄和性别。

但是根据这样的方法猜测出来的年龄和性别都带有中文字符,虽然OpenCV的imgproc工具提供了putText方法,但是该方法还不支持往图像上写中文,若调用putText方法写中文的话只会看到一堆乱码,为了在图像上看到年龄和性别,可以采取以下两种方法

1:修改OpenCV的C语言源码,在putText函数旁边增加putTextZH函数,新函数专门用来添加中文字符,同时还要修改sdk的Imgproc.java 补充native类型的putTextZH方法声明

2:第一种方法设计C代码修改与so库编译,操作十分麻烦,为此考虑先将OpenCV的mat结构转换为位图对象,再借助画布往位图上描绘文字

二、效果展示 

先上一张神仙姐姐刘亦菲的照片

可见性别判断的非常准确 但是年龄只能给出一个区间 有待改进

这个就有点抽象了 年轻时候的贝克汉姆竟然识别到51-65这个区间肯定是不合理的  

 

马儿的判断还是比较准确的 

 

梅西判断的也还比较准确 

 

 三、代码

部分代码如下 需要源码请点赞关注收藏后评论区留言私信~~~

package com.example.face;import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.PointF;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;import androidx.appcompat.app.AppCompatActivity;import com.example.face.util.BitmapUtil;
import com.example.face.util.FaceUtil;
import com.example.face.util.FaceUtil.FaceText;import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.dnn.Dnn;
import org.opencv.dnn.Net;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;public class GuessAgeActivity extends AppCompatActivity {private final static String TAG = "GuessAgeActivity";private int CHOOSE_CODE = 3; // 只在相册挑选图片的请求码private ImageView iv_face; // 声明一个图像视图对象private CascadeClassifier mJavaDetector; // OpenCV的人脸检测器private Net mAgeNet, mGenderNet; // 年龄模型,性别模型@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_guess_age);iv_face = findViewById(R.id.iv_face);findViewById(R.id.btn_choose).setOnClickListener(v -> {// 创建一个内容获取动作的意图(准备跳到系统相册)Intent albumIntent = new Intent(Intent.ACTION_GET_CONTENT);albumIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); // 是否允许多选albumIntent.setType("image/*"); // 类型为图像startActivityForResult(albumIntent, CHOOSE_CODE); // 打开系统相册});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent intent) {super.onActivityResult(requestCode, resultCode, intent);if (resultCode == RESULT_OK && requestCode == CHOOSE_CODE) { // 从相册返回if (intent.getData() != null) { // 从相册选择一张照片Uri uri = intent.getData(); // 获得已选择照片的路径对象// 根据指定图片的uri,获得自动缩小后的位图对象Bitmap bitmap = BitmapUtil.getAutoZoomImage(this, uri);guessAgeAndSex(bitmap); // 根据人脸猜测年龄和性别}}}// 根据人脸猜测年龄和性别private void guessAgeAndSex(Bitmap orig) {Mat rgba = new Mat();Utils.bitmapToMat(orig, rgba); // 把位图对象转为Mat结构Mat gray = new Mat();Imgproc.cvtColor(rgba, gray, Imgproc.COLOR_RGB2GRAY); // 全彩矩阵转灰度矩阵Mat three = new Mat();Imgproc.cvtColor(rgba, three, Imgproc.COLOR_RGBA2RGB); // 四通道转三通道// 下面识别人脸并预测年龄和性别MatOfRect faces = new MatOfRect();int height = gray.rows();int absoluteFaceSize = 0;if (Math.round(height * 0.2f) > 0) {absoluteFaceSize = Math.round(height * 0.2f);}if (mJavaDetector != null) { // 检测器开始识别人脸mJavaDetector.detectMultiScale(gray, faces, 1.1, 2, 2,new Size(absoluteFaceSize, absoluteFaceSize), new Size());}Rect[] faceArray = faces.toArray();List<FaceText> textList = new ArrayList<>();int lineWidth = Math.max(orig.getWidth()/600 + 1, orig.getHeight()/600 + 1);for (Rect rect : faceArray) { // 给找到的人脸标上相框String ageText = predictAge(mAgeNet, three.submat(rect)); // 猜测年龄String genderText = predictGender(mGenderNet, three.submat(rect)); // 猜测性别Scalar scalar = new Scalar(0, 255, 0, 255);Imgproc.rectangle(rgba, rect.tl(), rect.br(), scalar, lineWidth);PointF pos = new PointF((float) rect.tl().x / rgba.width(), (float) rect.tl().y / rgba.height());textList.add(new FaceText(pos, genderText + "," + ageText));//OpenCV的putText方法写中文会乱码,目前OpenCV的Java开发包还不支持中文//Imgproc.putText(rgba, ageText, rect.tl(), FONT_HERSHEY_PLAIN, 1.2, new Scalar(0, 0, 255), 1);}Bitmap mark = Bitmap.createBitmap(orig.getWidth(), orig.getHeight(), Bitmap.Config.ARGB_8888);Utils.matToBitmap(rgba, mark); // 把Mat结构转为位图对象mark = FaceUtil.drawTextList(this, mark, textList); // 往位图添加多个文字iv_face.setImageBitmap(mark);}// 获取年龄列表private List<String> ageLabels() {List<String> ageList = new ArrayList<>();ageList.add("0 - 3");ageList.add("4 - 7");ageList.add("8 - 14");ageList.add("15 - 24");ageList.add("25 - 37");ageList.add("38 - 50");ageList.add("51 - 65");ageList.add("66 -");return ageList;}// 根据模型网络分析预测图像矩阵private Core.MinMaxLocResult predictResult(Net modelNet, Mat imageMat) {// 输入图像矩阵Mat blob = Dnn.blobFromImage(imageMat, 1.0, new Size(227, 227));modelNet.setInput(blob, "data");Mat prob = modelNet.forward("prob"); // 模型网络开始预测Mat probMat = prob.reshape(1, 1);return Core.minMaxLoc(probMat);}// 猜测年龄private String predictAge(Net modelNet, Mat imageMat) {Core.MinMaxLocResult result = predictResult(modelNet, imageMat);return ageLabels().get((int) result.maxLoc.x);}// 猜测性别private String predictGender(Net modelNet, Mat imageMat) {Core.MinMaxLocResult result = predictResult(modelNet, imageMat);//return ((int) result.maxLoc.x)==1 ? "男" : "女";return ((int) result.maxLoc.x)==1 ? "女" : "男";}@Overrideprotected void onResume() {super.onResume();if (!OpenCVLoader.initDebug()) {Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);} else {Log.d(TAG, "OpenCV library found inside package. Using it!");mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);}}private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {if (status == LoaderCallbackInterface.SUCCESS) {new Thread(() -> importModel()).start(); // 启动分线程导入年龄模型和性别模型Log.d(TAG, "OpenCV loaded successfully");// 在OpenCV初始化完成后加载so库System.loadLibrary("detection_based_tracker");File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);File cascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");// 从应用程序资源加载级联文件try (InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);FileOutputStream os = new FileOutputStream(cascadeFile)) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = is.read(buffer)) != -1) {os.write(buffer, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();}// 根据级联文件创建OpenCV的人脸检测器mJavaDetector = new CascadeClassifier(cascadeFile.getAbsolutePath());if (mJavaDetector.empty()) {Log.d(TAG, "Failed to load cascade classifier");mJavaDetector = null;} else {Log.d(TAG, "Loaded cascade classifier from " + cascadeFile.getAbsolutePath());}cascadeDir.delete();} else{super.onManagerConnected(status);}}};// 导入年龄模型和性别模型private void importModel() {String prePath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/";String age_model = prePath + "age_net.caffemodel";String age_text = prePath + "age_deploy.prototxt";String gender_model = prePath + "gender_net.caffemodel";String gender_text = prePath + "gender_deploy.prototxt";mAgeNet = Dnn.readNetFromCaffe(age_text, age_model);mGenderNet = Dnn.readNetFromCaffe(gender_text, gender_model);}}

创作不易 觉得有帮助请点赞关注收藏~~~

http://www.dtcms.com/wzjs/187829.html

相关文章:

  • 基于java的音乐网站开发百度收录查询api
  • 手机网站设计知识企业seo顾问
  • 做网站暴利赚钱站长查询工具
  • 开发app学什么编程语言企业seo排名有 名
  • 无需域名网站建设南阳网站优化公司
  • 做网站的群石家庄百度推广优化排名
  • 怎样看网站是谁做的镇江网页设计
  • 苏州网站建设自助建站模板婚恋网站排名
  • icp备案查看网站内容吗泉州百度网络推广
  • 怎么制作网站平台电话全球网站流量排名查询
  • 贵州网站建设服务平台保定seo博客
  • 一般网站做推广要多大的带宽和内存产品销售方案与营销策略
  • 西柳网站建设怎么注册自己的网站域名
  • 网站备案密码上海seo公司哪个靠谱
  • 兰州市网站建设微信朋友圈广告30元 1000次
  • 任何人任意做网站销售产品违法吗免费搭建自己的网站
  • 网站建设福州今日特大新闻新事
  • 现在c 做网站用什么体育新闻最新消息
  • 台湾宜兰县政府建设局网站网站排名大全
  • 网站js修改代码品牌推广的三个阶段
  • 网站后台管理布局软文公司代写
  • 知名网站开发网站推广的常用方法有哪些?
  • 网站开发数据库有关合同seo综合查询接口
  • 齐齐哈尔市网站建设廊坊seo排名
  • 17做网店一样的网站校园推广
  • 镜像wordpress博客网站排名优化专业定制
  • 做设计的网站定制湖北网站设计
  • 自己有服务器怎么建设网站抖音竞价推广怎么做
  • 网络建设公司起名谷歌优化排名怎么做
  • 广宗企业做网站浙江网站推广公司