[免费]基于Python的招聘职位信息推荐系统(猎聘网数据分析与可视化)(Django+requests库)【论文+源码+SQL脚本】

大家好,我是python222_小锋老师,看到一个不错的基于Python的招聘职位信息推荐系统(猎聘网数据分析与可视化)(Django+requests库),分享下哈。

项目视频演示

【免费】基于Python的招聘职位信息推荐系统(猎聘网数据分析与可视化)(Django+爬虫) Python毕业设计_哔哩哔哩_bilibili

项目介绍

随着互联网和信息技术的不断发展,就业和招聘形式也迎来了深刻的变革。就业推荐系统不仅能够为求职者提供个性化、精准的匹配,而且还解决了现代就业市场面临的一系列挑战问题,另外对于求职者而言,该系统还减轻了信息过载的压力,帮助毕业生快速找到适合自己技能和兴趣的职位,节省了毕业生的求职时间和成本,提高了就业市场的效率,同时为毕业生提供更好的就业机会和就业支持。

本文基于协同过滤算法,设计实现了就业推荐系统,旨在提供高度个性化的职位推荐,以满足毕业生求职者和雇主的需求。系统首先采用爬虫技术收集企业公开发布的招聘岗位信息,抽取特征值并且归一化处理,根据指定的毕业生和求职人员的相似度计算毕业生和企业单位的相似度。然后在得到毕业生和企业单位的相似度的基础上,根据随机游走模型算法计算出企业单位的求职热度。最后计算最终的排序综合权值,完成基于协同过滤的就业推荐系统的建立。该系统涵盖了控制台功能、数据爬取、数据管理、数据可视化和就业推荐等多个核心功能模块。同时,系统为解决就业场景中企业与毕业生相互匹配的问题,引入企业对毕业生的偏好系数,企业偏好系数是利用改进的随机游走算法(PersonalRank)计算企业招聘过程中对毕业生特征属性的招聘偏好值。最终的推荐算法融合企业偏好系数计算出毕业生与企业的符合度,根据符合度为毕业生推荐合适的就业岗位。通过该系统,毕业生用户可以轻松地管理其就业信息,获得定制的职位推荐,并通过可视化工具了解就业市场趋势。

系统的设计过程中使用了先进的技术和开发框架,确保了系统的高性能和可扩展性。整个系统采用 Python 语言编写,后端基于 Django 的 Web 应用框架,数据库采用 MySQL设计,使用 ECharts 进行数据可视化显示。数据获取使用 Selenium 框架进行数据的采集,然后对数据进行分析并且将结果在前台进行可视化的展示。获取的数据解析后存储到数据库。该系统的个性化就业职位推荐功能是基于用户的协同过滤算法设计实现。经过功能测试和性能测试,系统展现出了其在多个方面的有效性和可靠性。总之,本文开发的就业推荐系统为解决现代就业市场的智能化挑战,提供了一个有前景的解决方案,并为未来功能更加强大的就业推荐系统的研究和应用提供了一定的基础。

系统展示

部分代码

{% load static %}
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>登入-职位推荐系统</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"><link rel="stylesheet" href="{% static "layuiadmin/layui/css/layui.css" %}" media="all"><link rel="stylesheet" href="{% static "layuiadmin/style/admin.css" %}" media="all"><link rel="stylesheet" href="{% static "layuiadmin/style/login.css" %}" media="all">
</head>
<body>{#  <div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">#}
<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login"style="display: none; background-image: url('/static/背景.png'); background-size: cover;"><div class="layadmin-user-login-main"><div class="layadmin-user-login-box layadmin-user-login-header"><h2 style="color: #fff">用户登录</h2><p>招聘推荐系统</p></div><div class="layadmin-user-login-box layadmin-user-login-body layui-form"><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-username"></label><input type="text" name="user" placeholder="账号" class="layui-input"></div><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-password"></label><input type="password" name="password" placeholder="密码" class="layui-input"></div><div class="layui-form-item" style="margin-bottom: 20px;"><a href="{% url "register" %}" class="layadmin-user-jump-change layadmin-link" style="margin-top: 7px;">还没账号?</a></div><div class="layui-form-item"><button class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit">登 入</button></div></div></div>
</div><script src="{% static "layuiadmin/layui/layui.js" %}"></script>
<script>layui.config({base: '{% static "layuiadmin/" %}' //静态资源所在路径}).extend({index: 'lib/index' //主入口模块}).use(['index', 'form', 'jquery'], function () {var $ = layui.jquery,form = layui.form,layer = layui.layer;//提交form.on('submit(LAY-user-login-submit)', function (obj) {obj = obj.field;if (obj.user == '') {layer.msg('账号不能为空');return false;}if (obj.password == '') {layer.msg('密码不能为空');return false;}//请求登入接口$.ajax({type: 'POST',url: '/login/',data: obj,success: function (res) {// 弹窗内容, 样式if (res.code == 0) {layer.msg(res.msg + ' ' + res.user_name, {icon: 1, time: 1000});setTimeout(function () {location.href = "http://127.0.0.1:8000/index/";}, 1000) // 延迟重定向} else {layer.msg(res.msg);return false;}},error: function (response) {layer.msg(response.msg);}})});});
</script>
</body>
</html>
from django.shortcuts import render, redirect
from django.http import JsonResponse
# Create your views here.
from job import models
import re
from psutil import *
from numpy import *
from job import tools
from job import job_recommendspider_code = 0  # 定义全局变量,用来识别爬虫的状态,0空闲,1繁忙# python manage.py inspectdb > job/models.py
# 使用此命令可以将数据库表导入models生成数据模型def login(request):if request.method == "POST":user = request.POST.get('user')pass_word = request.POST.get('password')print('user------>', user)users_list = list(models.UserList.objects.all().values("user_id"))users_id = [x['user_id'] for x in users_list]print(users_id)ret = models.UserList.objects.filter(user_id=user, pass_word=pass_word)if user not in users_id:return JsonResponse({'code': 1, 'msg': '该账号不存在!'})elif ret:# 有此用户 -->> 跳转到首页# 登录成功后,将用户名和昵称保存到session 中,request.session['user_id'] = useruser_obj = ret.last()if user_obj:  # 检查用户对象是否存在user_name = user_obj.user_namerequest.session['user_name'] = user_namereturn JsonResponse({'code': 0, 'msg': '登录成功!', 'user_name': user_name})else:return JsonResponse({'code': 1, 'msg': '密码错误!'})else:return render(request, "login.html")def register(request):if request.method == "POST":user = request.POST.get('user')pass_word = request.POST.get('password')user_name = request.POST.get('user_name')users_list = list(models.UserList.objects.all().values("user_id"))users_id = [x['user_id'] for x in users_list]if user in users_id:return JsonResponse({'code': 1, 'msg': '该账号已存在!'})else:models.UserList.objects.create(user_id=user, user_name=user_name, pass_word=pass_word)request.session['user_id'] = user  # 设置缓存request.session['user_name'] = user_namereturn JsonResponse({'code': 0, 'msg': '注册成功!'})else:return render(request, "register.html")# 退出(登出)
def logout(request):# 1. 将session中的用户名、昵称删除request.session.flush()# 2. 重定向到 登录界面return redirect('login')def index(request):"""此函数用于返回主页,主页包括头部,左侧菜单"""return render(request, "index.html")def welcome(request):"""此函数用于处理控制台页面"""job_data = models.JobData.objects.all().values()  # 查询所有的职位信息all_job = len(job_data)  # 职位信息总数list_1 = []  # 定义一个空列表for job in list(job_data):  # 使用循环处理最高哦薪资try:  # 使用try...except检验最高薪资的提取,如果提取不到则加入0salary_1 = float(re.findall(r'-(\d+)k', job['salary'])[0])  # 使用正则提取最高薪资job['salary_1'] = salary_1  # 添加一个最高薪资list_1.append(salary_1)  # 把最高薪资添加到list_1用来计算平均薪资except Exception as e:# print(e)job['salary_1'] = 0list_1.append(0)job_data = sorted(list(job_data), key=lambda x: x['salary_1'], reverse=True)  # 反向排序所有职位信息的最高薪资# print(job_data)job_data_10 = job_data[0:10]  # 取最高薪资前10用来渲染top—10表格# print(job_data[0:10])job_data_1 = job_data[0]  # 取出最高薪资的职位信息mean_salary = int(mean(list_1))  # 计算平均薪资spider_info = models.SpiderInfo.objects.filter(spider_id=1).first()  # 查询爬虫程序运行的数据记录# print(spider_info)return render(request, "welcome.html", locals())def spiders(request):global spider_code# print(spider_code)spider_code_1 = spider_codereturn render(request, "spiders.html", locals())def start_spider(request):if request.method == "POST":key_word = request.POST.get("key_word")city = request.POST.get("city")page = request.POST.get("page")role = request.POST.get("role")spider_code = 1  # 改变爬虫状态spider_model = models.SpiderInfo.objects.filter(spider_id=1).first()# print(spider_model)spider_model.count += 1  # 给次数+1spider_model.page += int(page)  # 给爬取页数加上选择的页数spider_model.save()if role == '猎聘网':# print(key_word,city,page)spider_code = tools.lieSpider(key_word=key_word, city=city, all_page=page)return JsonResponse({"code": 0, "msg": "爬取完毕!"})else:return JsonResponse({"code": 1, "msg": "请使用POST请求"})def job_list(request):return render(request, "job_list.html", locals())def get_job_list(request):"""此函数用来渲染职位信息列表"""page = int(request.GET.get("page", ""))  # 获取请求地址中页码limit = int(request.GET.get("limit", ""))  # 获取请求地址中的每页数据数量keyword = request.GET.get("keyword", "")price_min = request.GET.get("price_min", "")price_max = request.GET.get("price_max", "")edu = request.GET.get("edu", "")city = request.GET.get("city", "")job_data_list = list(models.JobData.objects.filter(name__icontains=keyword, education__icontains=edu,place__icontains=city).values())  # 查询所有的职位信息job_data = []if price_min != "" or price_max != "":for job in job_data_list:try:salary_1 = '薪资' + job['salary']max_salary = float(re.findall(r'-(\d+)k', salary_1)[0])  # 使用正则提取最高薪资min_salary = float(re.findall(r'薪资(\d+)', salary_1)[0])  # 使用正则提取最低薪资if price_min == "" and price_max != "":if max_salary <= float(price_max):job_data.append(job)elif price_min != "" and price_max == "":if min_salary >= float(price_min):job_data.append(job)else:if min_salary >= float(price_min) and float(price_max) >= max_salary:job_data.append(job)except Exception as e:  # 如果筛选不出就跳过continueelse:job_data = job_data_listjob_data_1 = job_data[(page - 1) * limit:limit * page]for job in job_data_1:ret = models.SendList.objects.filter(user_id=request.session.get("user_id"), job_id=job['job_id']).values()if ret:job['send_key'] = 1else:job['send_key'] = 0# print(job_data_1)if len(job_data) == 0 or len(job_data_list) == 0:return JsonResponse({"code": 1, "msg": "没找到需要查询的数据!", "count": "{}".format(len(job_data)), "data": job_data_1})return JsonResponse({"code": 0, "msg": "success", "count": "{}".format(len(job_data)), "data": job_data_1})def get_psutil(request):"""此函数用于读取cpu使用率和内存占用率"""# cpu_percent()可以获取cpu的使用率,参数interval是获取的间隔# virtual_memory()[2]可以获取内存的使用率return JsonResponse({'cpu_data': cpu_percent(interval=1), 'memory_data': virtual_memory()[2]})def get_pie(request):"""此函数用于渲染控制台饼图的数据,要求学历的数据和薪资待遇的数据"""edu_list = ['博士', '硕士', '本科', '大专', '不限']edu_data = []for edu in edu_list:edu_count = len(models.JobData.objects.filter(education__icontains=edu))  # 使用for循环,查询字段education包含这些学历的职位信息edu_data.append({'name': edu, "value": edu_count})  # 添加到学历的数据列表中# print(edu_data)list_5 = []list_10 = []list_15 = []list_20 = []list_30 = []list_50 = []list_51 = []job_data = models.JobData.objects.all().values()  # 查询所有的职位信息for job in list(job_data):try:salary_1 = float(re.findall(r'-(\d+)k', job['salary'])[0])  # 提取薪资待遇的最高薪资要求if salary_1 <= 5:  # 小于5K则加入list_5list_5.append(salary_1)elif 10 >= salary_1 > 5:  # 在5K和10K之间,加入list_10list_10.append(salary_1)elif 15 >= salary_1 > 10:  # 10K-15K加入list_15list_15.append(salary_1)elif 20 >= salary_1 > 15:  # 15K-20K加入list_20list_20.append(salary_1)elif 30 >= salary_1 > 20:  # 20K-30K 加list_30list_30.append(salary_1)elif 50 >= salary_1 > 30:  # 30K-50K加入list_50list_50.append(salary_1)elif salary_1 > 50:  # 大于50K加入list_51list_51.append(salary_1)except Exception as e:job['salary_1'] = 0salary_data = [{'name': '5K及以下', 'value': len(list_5)},  # 生成薪资待遇各个阶段的数据字典,value是里面职位信息的数量{'name': '5-10K', 'value': len(list_10)},{'name': '10K-15K', 'value': len(list_15)},{'name': '15K-20K', 'value': len(list_20)},{'name': '20K-30K', 'value': len(list_30)},{'name': '30-50K', 'value': len(list_50)},{'name': '50K以上', 'value': len(list_51)}]# print(edu_data)return JsonResponse({'edu_data': edu_data, 'salary_data': salary_data})def send_job(request):"""此函数用于投递职位和取消投递"""if request.method == "POST":user_id = request.session.get("user_id")job_id = request.POST.get("job_id")send_key = request.POST.get("send_key")if int(send_key) == 1:models.SendList.objects.filter(user_id=user_id, job_id=job_id).delete()else:models.SendList.objects.create(user_id=user_id, job_id=job_id)return JsonResponse({"Code": 0, "msg": "操作成功"})def job_expect(request):if request.method == "POST":job_name = request.POST.get("key_word")city = request.POST.get("city")ret = models.UserExpect.objects.filter(user=request.session.get("user_id"))# print(ret)if ret:ret.update(key_word=job_name, place=city)else:user_obj = models.UserList.objects.filter(user_id=request.session.get("user_id")).first()models.UserExpect.objects.create(user=user_obj, key_word=job_name, place=city)return JsonResponse({"Code": 0, "msg": "操作成功"})else:ret = models.UserExpect.objects.filter(user=request.session.get("user_id")).values()# print(ret)if len(ret) != 0:keyword = ret[0]['key_word']place = ret[0]['place']else:keyword = ''place = ''return render(request, "expect.html", locals())def get_recommend(request):recommend_list = job_recommend.recommend_by_item_id(request.session.get("user_id"), 9)# print(recommend_list)return render(request, "recommend.html", locals())def send_page(request):return render(request, "send_list.html")def send_list(request):send_list = list(models.JobData.objects.filter(sendlist__user=request.session.get("user_id")).values())for send in send_list:send['send_key'] = 1if len(send_list) == 0:return JsonResponse({"code": 1, "msg": "没找到需要查询的数据!", "count": "{}".format(len(send_list)), "data": []})else:return JsonResponse({"code": 0, "msg": "success", "count": "{}".format(len(send_list)), "data": send_list})def pass_page(request):user_obj = models.UserList.objects.filter(user_id=request.session.get("user_id")).first()return render(request, "pass_page.html", locals())def up_info(request):if request.method == "POST":user_name = request.POST.get("user_name")old_pass = request.POST.get("old_pass")pass_word = request.POST.get("pass_word")user_obj = models.UserList.objects.filter(user_id=request.session.get("user_id")).first()if old_pass != user_obj.pass_word:return JsonResponse({"Code": 0, "msg": "原密码错误"})else:models.UserList.objects.filter(user_id=request.session.get("user_id")).update(user_name=user_name,pass_word=pass_word)return JsonResponse({"Code": 0, "msg": "密码修改成功"})def salary(request):return render(request, "salary.html")def edu(request):return render(request, "edu.html")def bar_page(request):return render(request, "bar_page.html")def bar(request):key_list = [x['key_word'] for x in list(models.JobData.objects.all().values("key_word"))]# print(key_list)bar_x = list(set(key_list))# print(bar_x)bar_y = []for x in bar_x:bar_y.append(key_list.count(x))# print(bar_y)return JsonResponse({"Code": 0, "bar_x": bar_x, "bar_y": bar_y})

源码下载

链接:https://pan.baidu.com/s/1QOrfbB4Q-5nnlixX-S7nvA
提取码:1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91465.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产化PDF处理控件Spire.PDF教程:Java 提取 PDF 图片,高质量提取与图片过滤技巧

在处理包含图片的 PDF 文件时&#xff0c;例如扫描文档、产品手册或宣传资料&#xff0c;我们经常需要将其中的图像提取出来&#xff0c;用于保存、识别或再加工。E-iceblue旗下Spire系列产品&#xff0c;是文档处理领域的佼佼者&#xff0c;支持国产化信创。本文将介绍如何使用…

Cesium 快速入门(七)材质详解

Cesium 快速入门&#xff08;七&#xff09;材质详解 看过的知识不等于学会。唯有用心总结、系统记录&#xff0c;并通过温故知新反复实践&#xff0c;才能真正掌握一二 作为一名摸爬滚打三年的前端开发&#xff0c;开源社区给了我饭碗&#xff0c;我也将所学的知识体系回馈给大…

C++:结构体(Structure)

目录 第一性原理出发&#xff1a;我们要解决什么问题&#xff1f; 定义结构体&#xff08;Defining Structures&#xff09; 问题&#xff1a;名字太长怎么办&#xff1f; 如何定义结构体变量&#xff1f; 结构体的大小&#xff08;Size of Structures&#xff09; 初始化…

化学结构式解读指南:从基础认知到InDraw智能识别

中文名称&#xff1a;3-[2-(二甲基氨基)乙基]-1H-吲哚英文名称&#xff1a;3-[2-(dimethylamino)ethyl]-1H-indole分子式: C12H16N2分子量: 188.2740这是什么结构式&#xff1f;怎么绘制呢&#xff1f;可以用InDraw里的AI图像识别这个结构式&#xff0c;也可以手动绘图&#xf…

如何使用一台电脑adb调试多个Android设备

目录 一、临时断开其中一个设备连接 二、指定调试设备 总结 当我们使用Android调试工具调试多个设备&#xff0c;例如一开始使用adb连接了一台Android真机进行调试&#xff0c;此时又在Android studio中打开了一个模拟机&#xff0c;此时我们在adb命令窗口中使用adb命令的…

ChatGPT的下一站:从“答案引擎”到“思维教练”

摘要&#xff1a;我们正处在一个“万物皆可ChatGPT”的时代&#xff0c;但当它沦为最高效的“代码搬运工”和“作业速成器”时&#xff0c;我们得到的究竟是效率的提升还是思维的退化&#xff1f;本文深入探讨一个引人深思的概念——“导师模式”的AI。它不再直接提供答案&…

SpringBoot集成Flyway

SpringBoot集成Flyway_springboot flyway-CSDN博客 Flyway 本质上是一个开源的数据库迁移工具&#xff0c;它能够以自动化、可重复且可靠的方式管理数据库的变更。无论是小型项目还是大型企业级应用&#xff0c;Flyway 都能助力开发者轻松应对数据库架构的演进。它支持多种数据…

【实时Linux实战系列】实时图像处理应用开发

在当今快速发展的技术领域&#xff0c;实时图像处理应用在众多领域发挥着至关重要的作用。从自动驾驶汽车、工业自动化检测到医疗影像诊断&#xff0c;实时图像处理技术的应用场景无处不在。通过在实时Linux系统中开发图像处理应用&#xff0c;开发者能够充分利用Linux的稳定性…

Caterpillar Fungus Optimizer, CFO

核心算法解析1. 算法框架与初始化class EnhancedCFO: def __init__(self, objective_func, dim10, pop_size30, max_iter200, lb-10, ub10):​​改进点​​&#xff1a;针对传统优化算法后期易停滞的问题&#xff0c;结合了精英策略、多样性控制和自适应参数​​关键特性​​&a…

c++设计模式编程练习

一、运用观察者模式原理编写鸟类模型运行结果&#xff1a;二、运用简单工厂模式编写打怪掉装备模型运行结果

FastMCP本地构建Server和Clinet交互

1. MCP Server介绍 MCP Server 是实现模型上下文协议&#xff08;MCP&#xff09;的服务器&#xff0c;旨在为 AI 模型提供一个标准化接口&#xff0c;连接外部数据源和工具&#xff0c;例如文件系统、数据库或 API。 相比之下&#xff0c;在MCP出现前&#xff0c;AI调用工具…

工业企业与清洁生产匹配数据库(1998-2015年)

1484工业企业与清洁生产匹配数据库&#xff08;1998-2015年&#xff09;“清洁生产”近年发文趋势及主题分布数据来源中华人民共和国生态环境部以及中国工业企业数据库&#xff0c;由数据皮皮侠团队整理时间跨度1998-2015年数据范围各工业企业数据指标参考文献孙博文,郑世林.环…

第13届蓝桥杯C++青少组中/高级组选拔赛2022年1月22日真题

第13届蓝桥杯C青少组中/高级组选拔赛2022年1月22日真题 更多内容请查看网站&#xff1a;【试卷中心 -----> 蓝桥杯----> C ----> 选拔赛】 网站链接 青少年软件编程历年真题模拟题实时更新 编程题 第 1 题 比大小 题目描述&#xff1a; 给出两个不同的整数&#…

从0到1学PHP(七):PHP 与 HTML 表单:实现数据交互

目录一、表单的创建与提交方式1.1 HTML 表单的基本结构1.2 GET 和 POST 提交方式的区别及适用场景二、表单数据的接收与处理2.1 使用\$_GET、\$_POST 超全局变量获取表单数据2.2 对接收的数据进行验证三、表单安全处理3.1 防止 XSS 攻击的方法3.2 防止 CSRF 攻击的措施一、表单…

Docker compose和Docker-compose的区别

Docker Compose 的两个命令形式 docker compose&#xff08;空格连接&#xff09;与 docker-compose&#xff08;短横线连接&#xff09;核心区别如下&#xff1a;一、技术本质docker-compose&#xff08;短横线&#xff09;独立可执行文件&#xff1a;早期实现方式&#xff0c…

自定心深凹槽参数检测装置及检测方法 - 激光频率梳 3D 轮廓检测

一、引言在机械零件深凹槽检测中&#xff0c;传统方法常因定心不准导致检测误差。如平台推表检测时零件基准面与测量平台难以精准对齐&#xff0c;三坐标测量需人工找正&#xff0c;效率低且误差大。激光频率梳 3D 轮廓检测虽精度高&#xff0c;但缺乏自定心机制会影响深凹槽轴…

C语言---结构体(格式、用法、嵌套、初始化)、共用体、枚举类型、typedef类型

目录 结构体与共用体 1、结构体(struct) (1) 格式与用法 (2) 结构体允许嵌套 (3) 结构体成员初始化 (4) 指针替换变量 (5) 求结构体在内存空间所占字节 2、共用体(union) (1) 格式与概念 (2) 应用 3、枚举类型(enum) (1) 格式与概念 (2) 应用 4、typedef 类型 结构体与共用…

辐射源定位方法简述

文章目录 前言 一、按照信息建模分类 1.1.时间参数 1.1.1.到达时间&#xff08;TOA, Time of Arrival&#xff09;定位 1.1.2.到达时间差&#xff08;TDOA, Time Difference of Arrival&#xff09;定位 1.2.角度参数 1.2.1.到达角度&#xff08;AOA, Angle of Arrival&a…

CamX-设置SceneMode:CONTROL_SCENE_MODE_FACE_PRIORITY不生效问题解决

应用设置CONTROL_SCENE_MODE_FACE_PRIORITY设置不生效 问题&#xff1a;app 代码 CaptureRequest.Builder captureRequestBuilder mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTRO…

MFC CChartCtrl编程

重点&#xff1a;创建CChartCtrl控件有2种方式1、直接创建CChartCtrl2、窗体上添加Custom Control&#xff08;切记一定不能是Static Text或者Picture Control&#xff0c;否则无法响应鼠标消息&#xff09;&#xff0c;然后根据ID关联CChartCtrl控件&#xff0c;初始化代码如下…