通过百度API检测人脸特征,获取颜值、年龄、性别--C语言实现

文章目录

  • 通过百度API检测人脸特征,获取颜值、年龄、性别--C语言实现
    • 一、创建应用获取AK、SK
    • 1.注册登陆后点击:人脸识别云服务
    • 2.立即使用
    • 3.免费尝鲜领取后、创建应用
    • 4.拿到API Key 和Secret Key
  • 二、通过API获取图片的颜值、年龄、性别信息
    • 1.获取access_token
    • 2.对图片进行base64编码
    • 3.Post 请求,获取图片的颜值、年龄、性别
    • 4.解析JSON数据
    • 5.最终结果如下:
    • 6.全部代码如下:

通过百度API检测人脸特征,获取颜值、年龄、性别–C语言实现

一、创建应用获取AK、SK

用到的开源库有:cJSON、libcurl

百度API获取方式:https://cloud.baidu.com/

1.注册登陆后点击:人脸识别云服务

在这里插入图片描述

2.立即使用

在这里插入图片描述

3.免费尝鲜领取后、创建应用

在这里插入图片描述

4.拿到API Key 和Secret Key

在这里插入图片描述

二、通过API获取图片的颜值、年龄、性别信息

1.获取access_token

参考:API文档

C代码如下 :用到的库有curl、cJSON
cJSON、libcurl

test.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/stat.h>	//stat文件属性
#include <unistd.h>
#include "cJSON.h"
#include "base64.h"
#include "curl/curl.h"
const char *pic_dir = "./xx.jpg";		//图片的路径
const char *request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect";//post请求的url 不需要修改
const char *access_token_url =  "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials";		  //获取access_token的url 不需要修改
const char *api_key = "xxxxxx";			//自己的API Key 
const char *secret_key = "xxxxxxxx";	//自己的 Secret Key//声明一个结构体存数据
struct MemoryStruct {char *memory;size_t size;
};
//获取网站传回的数据    
static size_t MyCallBack_WriteToken(void *contents, size_t size, size_t nmemb, void *userp)
{       size_t realSize = size * nmemb;struct MemoryStruct *mem = (struct MemoryStruct *)userp;char *ptr = realloc(mem->memory, mem->size + realSize + 1);if(!ptr) {/* out of memory! */printf("not enough memory (realloc returned NULL)\n");return 0;}mem->memory = ptr;memcpy(&(mem->memory[mem->size]), contents, realSize);mem->size += realSize;mem->memory[mem->size] = 0;return realSize; 
}static int get_access_token__(struct MemoryStruct *access_token) {CURL *curl;CURLcode result_code;int error_code = 0;int bufSize = strlen(access_token_url)+strlen(api_key)+strlen(secret_key)+50;char *url = (char *)malloc(sizeof(char)*bufSize);sprintf(url,"%s&client_id=%s&client_secret=%s",access_token_url,api_key,secret_key);//设置URLcurl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);//设置传输的数据curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)access_token);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, MyCallBack_WriteToken);result_code = curl_easy_perform(curl);//执行 if (result_code != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(result_code));return 1;}curl_easy_cleanup(curl);error_code = 0;} else {fprintf(stderr, "curl_easy_init() failed.");error_code = 1;}return error_code;
}void get_access_tokenStr(char **str)
{struct MemoryStruct *access_token;access_token = malloc(sizeof(struct MemoryStruct));access_token->memory = malloc(1);access_token->size = 0;get_access_token__(access_token);// printf("%s\n",access_token->memory);cJSON *root = cJSON_Parse(access_token->memory);cJSON *item = cJSON_GetObjectItem(root,"access_token");*str = (char *)malloc(strlen(item->valuestring) + 1);memcpy(*str,item->valuestring,strlen(item->valuestring) + 1);// char *s = cJSON_Print(root);// printf("%s\n",s);// free(s);free(access_token->memory);free(access_token);
}/*test*/
void main(void)
{char *access_token;get_access_tokenStr(&access_token);printf("%s\n",access_token);free(access_token);return;
}

编译运行:

gcc test.c -I ./include -L ./lib -lcjson -lm

2.对图片进行base64编码

查看API文档请求格式为application/json,图片需要进行Base64编码、图片的格式可以为PNG、JGP、JPEG、BMP

在这里插入图片描述

①先在目录中保存一张包含人脸的图片例如1.png
在这里插入图片描述

②对图片进行Base64编码

base64编码

3.Post 请求,获取图片的颜值、年龄、性别

①封装请求头

请求格式如下:
在这里插入图片描述

// curl发送http请求调用的回调函数,回调函数中对返回的存储在了结构体faceContet中
static size_t callback__(void *contents, size_t size, size_t nmemb, void *userp)
{size_t realSize = size * nmemb;struct MemoryStruct *mem = (struct MemoryStruct *)userp;char *ptr = realloc(mem->memory, mem->size + realSize + 1);if(!ptr) {/* out of memory! */printf("not enough memory (realloc returned NULL)\n");return 0;}mem->memory = ptr;memcpy(&(mem->memory[mem->size]), contents, realSize);mem->size += realSize;mem->memory[mem->size] = 0;return realSize; }
// 人脸检测与属性分析
static int post_request(struct MemoryStruct *faceContet,const char *request_param,const char *access_token)
{char *url;int bufSize = strlen(request_url) + strlen(access_token) + 20;url = (char *)malloc(sizeof(char)*bufSize);// https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=【调用鉴权接口获取的token】sprintf(url,"%s?access_token=%s",request_url,access_token);CURL *curl;curl = curl_easy_init();if(curl){CURLcode res;struct curl_header *header;//设置URLcurl_easy_setopt(curl,CURLOPT_URL,url);//设置协议头struct curl_slist *headers = NULL;headers = curl_slist_append(headers,"Content-Type:application/json;charset=UTF-8");curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);// "{"image":"027d8308a2ec665acb1bdf63e513bcb9","image_type":"FACE_TOKEN","face_field":"faceshape,facetype"}"curl_easy_setopt(curl, CURLOPT_POSTFIELDS,request_param);//设置post的回调函数curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)faceContet);curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,callback__);//设置传输的数据curl_easy_setopt(curl,CURLOPT_POST,1);//执行 curl_easy_perform(curl);}}
//需要传入access_token
char * get_face_detch(const char * access_token)  //获取post请求返回的参数
{struct MemoryStruct *faceContet;faceContet = malloc(sizeof(struct MemoryStruct));faceContet->memory = malloc(1);faceContet->size = 0;char *request_param,*jpgBuf,*base64JpgBuf;//获取图片的base64编码作为http post请求的参数struct stat statBuf;stat(pic_dir,&statBuf);     //获取文件信息int fileSize = statBuf.st_size; //获取文件大小jpgBuf = malloc(sizeof(char)*fileSize + 1);FILE *file;file = fopen(pic_dir,"r");if(file == NULL){perror("fopen");return NULL;}if(fread(jpgBuf,fileSize,1,file) == 0){printf("读取文件失败!");// getchar();exit(0);}int size = (int)((float)fileSize*1.5);base64JpgBuf = (char *)malloc(size*fileSize*sizeof(char));base64_encode_file(jpgBuf,base64JpgBuf,fileSize);request_param = (char *)malloc(strlen(base64JpgBuf) + 100);//请求参数设置sprintf(request_param,"{\"image\":\"%s\",\"image_type\":\"BASE64\",\"face_field\":\"age,gender,beauty\"}",base64JpgBuf);post_request(faceContet,request_param,access_token);free(jpgBuf);free(base64JpgBuf);free(request_param);/*test*/// cJSON *root = cJSON_Parse(faceContet->memory);// char *s = cJSON_Print(root);// printf("%s\n",s);// free(s);// printf("%s\n",faceContet->memory);return faceContet->memory;
}

4.解析JSON数据

使用cJSON解析


typedef struct PersonalInfo
{int age;char gender[GENDER_BUF_SIZE];float beauty; 
}DataType;void parse_face_info(char *faceJsonStr)
{DataType data;cJSON *root,*result,*face_list,*obj,*val; root = cJSON_Parse(faceJsonStr);int flag = 0;if(root != NULL && root->type == cJSON_Object){result = cJSON_GetObjectItem(root,"result"); if(result != NULL && result->type == cJSON_Object){face_list = cJSON_GetObjectItem(result,"face_list");if(face_list != NULL && face_list->type == cJSON_Array){obj = cJSON_GetArrayItem(face_list,0);if(obj != NULL && obj->type == cJSON_Object){val = cJSON_GetObjectItem(obj,"age");data.age = val->valueint;val = cJSON_GetObjectItem(obj,"beauty");data.beauty = val->valuedouble;val = cJSON_GetObjectItem(obj,"gender");if(val != NULL && val->type == cJSON_Object){val = cJSON_GetObjectItem(val,"type");strcpy(data.gender,val->valuestring);flag = 1;}}}}}if(flag)printf("%d\t%s\t%.2f\t\n",data.age,data.gender,data.beauty);else{printf("解析失败!\n"); char *s = cJSON_Print(root);printf("%s\n",s);free(s);}cJSON_Delete(root);
}

5.最终结果如下:

在这里插入图片描述

颜值挺高80.23!

6.全部代码如下:

全部文件见:https://github.com/yiyihi/face_recognition
or
https://gitee.com/yyhi/face_recognition
只需要修改三个地方AK、SK、access_token即可测试

total.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "cJSON.h"
#include "curl/curl.h"
#define GENDER_BUF_SIZE 10// size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。//声明一个结构体
struct MemoryStruct {char *memory;size_t size;
};typedef struct PersonalInfo
{int age;char gender[GENDER_BUF_SIZE];float beauty; 
}DataType;const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";const char *pic_dir = "./1.png";		//图片路径const char *request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
const char *access_token_url =  "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials";
const char *api_key = "xxxxx";			//自己的AK
const char *secret_key = "xxxx";		//自己的SKchar *base64_encode_file(const unsigned char * bindata, char * base64, int binlength)
{int i, j;unsigned char current;for ( i = 0, j = 0 ; i < binlength ; i += 3 ){current = (bindata[i] >> 2) ;current &= (unsigned char)0x3F;base64[j++] = base64char[(int)current];current = ( (unsigned char)(bindata[i] << 4 ) ) & ( (unsigned char)0x30 ) ;if ( i + 1 >= binlength ){base64[j++] = base64char[(int)current];base64[j++] = '=';base64[j++] = '=';break;}current |= ( (unsigned char)(bindata[i+1] >> 4) ) & ( (unsigned char) 0x0F );base64[j++] = base64char[(int)current];current = ( (unsigned char)(bindata[i+1] << 2) ) & ( (unsigned char)0x3C ) ;if ( i + 2 >= binlength ){base64[j++] = base64char[(int)current];base64[j++] = '=';break;}current |= ( (unsigned char)(bindata[i+2] >> 6) ) & ( (unsigned char) 0x03 );base64[j++] = base64char[(int)current];current = ( (unsigned char)bindata[i+2] ) & ( (unsigned char)0x3F ) ;base64[j++] = base64char[(int)current];}base64[j] = '\0';return 0;
}//获取网站传回的数据    
static size_t MyCallBack_WriteToken(void *contents, size_t size, size_t nmemb, void *userp)
{       size_t realSize = size * nmemb;struct MemoryStruct *mem = (struct MemoryStruct *)userp;char *ptr = realloc(mem->memory, mem->size + realSize + 1);if(!ptr) {/* out of memory! */printf("not enough memory (realloc returned NULL)\n");return 0;}mem->memory = ptr;memcpy(&(mem->memory[mem->size]), contents, realSize);mem->size += realSize;mem->memory[mem->size] = 0;return realSize; 
}static int get_access_token__(struct MemoryStruct *access_token) {CURL *curl;CURLcode result_code;int error_code = 0;int bufSize = strlen(access_token_url)+strlen(api_key)+strlen(secret_key)+50;char *url = (char *)malloc(sizeof(char)*bufSize);sprintf(url,"%s&client_id=%s&client_secret=%s",access_token_url,api_key,secret_key);//设置URLcurl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);//设置传输的数据curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)access_token);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, MyCallBack_WriteToken);result_code = curl_easy_perform(curl);//执行 if (result_code != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(result_code));return 1;}curl_easy_cleanup(curl);error_code = 0;} else {fprintf(stderr, "curl_easy_init() failed.");error_code = 1;}return error_code;
}void get_access_tokenStr(char **str)
{struct MemoryStruct *access_token;access_token = malloc(sizeof(struct MemoryStruct));access_token->memory = malloc(1);access_token->size = 0;get_access_token__(access_token);// printf("%s\n",access_token->memory);cJSON *root = cJSON_Parse(access_token->memory);cJSON *item = cJSON_GetObjectItem(root,"access_token");*str = (char *)malloc(strlen(item->valuestring) + 1);memcpy(*str,item->valuestring,strlen(item->valuestring) + 1);// char *s = cJSON_Print(root);// printf("%s\n",s);// free(s);free(access_token->memory);free(access_token);
}// curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
static size_t callback__(void *contents, size_t size, size_t nmemb, void *userp)
{size_t realSize = size * nmemb;struct MemoryStruct *mem = (struct MemoryStruct *)userp;char *ptr = realloc(mem->memory, mem->size + realSize + 1);if(!ptr) {/* out of memory! */printf("not enough memory (realloc returned NULL)\n");return 0;}mem->memory = ptr;memcpy(&(mem->memory[mem->size]), contents, realSize);mem->size += realSize;mem->memory[mem->size] = 0;return realSize; }
// 人脸检测与属性分析
static int post_request(struct MemoryStruct *faceContet,const char *request_param,const char *access_token)
{char *url;int bufSize = strlen(request_url) + strlen(access_token) + 20;url = (char *)malloc(sizeof(char)*bufSize);// https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=【调用鉴权接口获取的token】sprintf(url,"%s?access_token=%s",request_url,access_token);CURL *curl;int error_code = 0;CURLcode result_code;curl = curl_easy_init();if(curl){//设置URLcurl_easy_setopt(curl,CURLOPT_URL,url);//设置协议头struct curl_slist *headers = NULL;headers = curl_slist_append(headers,"Content-Type:application/json;charset=UTF-8");curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);// "{"image":"027d8308a2ec665acb1bdf63e513bcb9","image_type":"FACE_TOKEN","face_field":"faceshape,facetype"}"curl_easy_setopt(curl, CURLOPT_POSTFIELDS,request_param);//设置post的回调函数curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)faceContet);curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,callback__);//设置传输的数据curl_easy_setopt(curl,CURLOPT_POST,1);result_code = curl_easy_perform(curl);//执行 if (result_code != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(result_code));return 1;}curl_easy_cleanup(curl);error_code = 0;} else {fprintf(stderr, "curl_easy_init() failed.");error_code = 1;}
}char * get_face_detch(const char * access_token)  //获取post请求返回的参数
{struct MemoryStruct *faceContet;faceContet = malloc(sizeof(struct MemoryStruct));faceContet->memory = malloc(1);faceContet->size = 0;char *request_param,*jpgBuf,*base64JpgBuf;//获取图片的base64编码作为http post请求的参数struct stat statBuf;stat(pic_dir,&statBuf);     //获取文件信息int fileSize = statBuf.st_size; //获取文件大小jpgBuf = malloc(sizeof(char)*fileSize + 1);FILE *file;file = fopen(pic_dir,"r");if(file == NULL){perror("fopen");return NULL;}if(fread(jpgBuf,fileSize,1,file) == 0){printf("读取文件失败!");// getchar();exit(0);}int size = (int)((float)fileSize*1.5);base64JpgBuf = (char *)malloc(size*sizeof(char));if(base64JpgBuf == NULL){perror("malloc error!");return NULL;}bzero(base64JpgBuf,size);base64_encode_file(jpgBuf,base64JpgBuf,fileSize);request_param = (char *)malloc(size + 100);sprintf(request_param,"{\"image\":\"%s\",\"image_type\":\"BASE64\",\"face_field\":\"age,gender,beauty\"}",base64JpgBuf);post_request(faceContet,request_param,access_token);free(jpgBuf);free(base64JpgBuf);free(request_param);fclose(file);/*test*/// cJSON *root = cJSON_Parse(faceContet->memory);// char *s = cJSON_Print(root);// printf("%s\n",s);// free(s);// printf("%s\n",faceContet->memory);return faceContet->memory;
}void parse_face_info(char *faceJsonStr)
{DataType data;cJSON *root,*result,*face_list,*obj,*val; root = cJSON_Parse(faceJsonStr);int flag = 0;if(root != NULL && root->type == cJSON_Object){result = cJSON_GetObjectItem(root,"result"); if(result != NULL && result->type == cJSON_Object){face_list = cJSON_GetObjectItem(result,"face_list");if(face_list != NULL && face_list->type == cJSON_Array){obj = cJSON_GetArrayItem(face_list,0);if(obj != NULL && obj->type == cJSON_Object){val = cJSON_GetObjectItem(obj,"age");data.age = val->valueint;val = cJSON_GetObjectItem(obj,"beauty");data.beauty = val->valuedouble;val = cJSON_GetObjectItem(obj,"gender");if(val != NULL && val->type == cJSON_Object){val = cJSON_GetObjectItem(val,"type");strcpy(data.gender,val->valuestring);flag = 1;}}}}}if(flag)printf("%d\t%s\t%.2f\t\n",data.age,data.gender,data.beauty);else{printf("解析失败!\n"); char *s = cJSON_Print(root);printf("%s\n",s);free(s);}cJSON_Delete(root);
}int main(int argc, char const *argv[])
{char *access_token,*faceJsonStr;curl_global_init(CURL_GLOBAL_ALL);// get_access_tokenStr(&access_token);	//只需要一个月获取一次access_token = "xxxxxxxx";				//自己的access_token// printf("%s\n",access_token);faceJsonStr = get_face_detch(access_token);parse_face_info(faceJsonStr);free(faceJsonStr);return 0;
}// libcurl参考:
// https://curl.se/libcurl/c/example.html

编译运行

gcc total.c -I ./include -L ./lib -lcurl -lcjson -lm
./a.out

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

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

相关文章

这款社交APP,不建议女生下

最近发现&#xff0c;一个叫做Hay的APP霸榜App Store榜首多天。 这是一个专注全球聊天交友的APP&#xff0c;主打即时视频聊天功能。 即使语言不通也完全没有关系&#xff0c;Hay在视频聊天的下方&#xff0c;有app内置的翻译&#xff0c;翻译成双方能看得懂的语言。 想体验这款…

【Python+百度API】实现人脸识别和颜值检测系统(包括人脸数量、年龄、颜值评分、性别、种族、表情检测)(超详细 附源码)

需要源码请点赞关注收藏后评论区留下QQ~~~ 本系统根据已有的模型上改写&#xff0c;添加了在给照片打分的同时可以显示照片&#xff0c;这样显得更加直观和真实 一、百度API文档 如需要请自行前往官网查询文档相关内容 百度API官网 部分内容如下 接口能力 人脸检测&#…

python神经网络:女生颜值打分器(一)

python讨论qq群&#xff1a;996113038 导语&#xff1a; 前几天写了一个批量下载“小姐姐”图片的爬虫&#xff0c;阅读量还挺高的。本来想多写一些这种类型的文章。毕竟学程序的男生比较多&#xff0c;都喜欢看与妹子相关的文章&#xff0c;但想着&#xff0c;这是一个技术类的…

python调用百度人脸识别对美女进行颜值打分

调用百度人脸识别 一、注册百度api 先百度开发者开发平台注册应用https://ai.baidu.com/tech/face/detect 1、创建应用 2、管理应用 APP_ID, API_KEY, SECRET_KEY都会用到 安装使用Python SDK 二、使用Python SDK 1、安装SDK pip install baidu-aip2、新建一个AipFace&a…

陪玩MM千千万,谁是你的NO.1?使用Python获取陪玩照片进行颜值检测打分

陪玩MM千千万&#xff0c;谁是你的NO.1&#xff1f;使用Python获取陪玩照片进行颜值检测打分 序言工欲善其事&#xff0c;必先利其器1、数据来源分析2、实现步骤3、环境与模块 代码展示 序言 哈喽好兄弟们~ 咱们这几年玩过游戏的&#xff0c;基本都知道陪玩吧&#xff01; 漂…

Python简单实现人脸识别检测, 对某平台美女主播照片进行评分排名

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 2021.2 模块使用: 第三方模块 requests >>> pip install requests tqdm >>> pip install tqdm 简单实现进度条效果 自带模块 os base64 采集代码 导入模块 # 数…

颜值大比拼,用数据告诉你中国哪里美女多?

这个被叫做”颜值调查”的互联网实验于4月29日晚上8点正式开放&#xff0c;截止5月4日24点&#xff0c;共有619位志愿者参与了活动&#xff0c;其中&#xff0c;地址和照片有效信息2413条。 从参与时间上看&#xff0c;29号晚上的短短4个小时以内&#xff0c;参与人数达到峰值的…

吃饱了撑的用python做一个颜值检测 并对美女排名❤

嗨害大家好鸭&#xff01;我是小熊猫&#x1f5a4;! 今天hin闲~ 要闲出P来了&#x1f4a8; 然后花了那么二、四、六、叭&#xff01;分钟~ 做了一个小小的颜值检测~ 目录&#xff08;可点击自己想去的地方哦~&#x1f60b;&#xff09; 开发环境: Python 3.8Pycharm 2021.2 …

别在看不起女程序媛了,一个高颜值女程序媛的日常

「 女程序媛崛起 」 今天这篇文&#xff0c;意义特殊&#xff0c;是我的一个迷妹程序媛-祈澈姑娘写的&#xff0c;她发给我后&#xff0c;我看了通篇&#xff0c;感觉写的很真实&#xff0c;而且又是记录女程序媛的日常&#xff0c;比较少见&#xff0c;所以我很有兴趣&#xf…

Python实现人脸识别检测,对主播进行颜值排行

前言 嗨嗨&#xff0c;我亲爱的家人们 今天来整点不一样的&#xff0c;嘿嘿 用Python简单实现对人脸识别的检测&#xff0c;对某平台主播照片进行评分排名 应该对女主播这个词不陌生吧&#xff0c;怎么说应该还是蛮多人看过一些女主播吧 我无聊的时候也会看看&#xff0c;…

我这个程序员是如何找到女朋友的

估计这是一篇虐狗的文章了&#xff01;&#xff01;请捂好小心脏 昨天刚好是恋爱一周年&#xff0c;那就写写我是如何脱单的故事了。 其实没啥好写的&#xff0c;毕竟我去年6月份换了家公司上班&#xff0c;好像还没过试用期吧。突然邻座的邻座的邻座的UI设计师就在某天加了我…

天天new对象的程序员,居然能找到女朋友?还能教你追女生?

江湖上有种谣言说&#xff1a;程序员不解风情&#xff0c;一天到晚只知道打代码...... 但是程序员也是人&#xff0c;面对心爱之人&#xff0c;也会有浪漫主义的一面。在情人节送给自己的女朋友玫瑰花&#xff0c;对于程序员来说是不是太普通了呢&#xff1f;作为一名程序员&am…

程序员如何找女朋友?教你程序员找女朋友的技巧!

很多程序员都会遇到这样的一个难题&#xff0c;那就是自己到一定年纪了&#xff0c;但是找不到合适的对象&#xff0c;很多程序员由于工作的原因&#xff0c;很少更人接触交流&#xff0c;所以导致性格老实内向&#xff0c;这样的性格对于找女朋友来说是致命的。今天&#xff0…

不会聊天,怎么可能找到女朋友?

如果你的职业规划&#xff0c;就是往专业深度上走&#xff0c;成长为一名专家&#xff0c;如何增大职场成功的概率呢&#xff1f; 主观上&#xff0c;作为一个专家&#xff0c;基本功、架构能力、业务能力、工作态度非常重要&#xff1a; 有夯实的专业基本功架构能力强业务能力…

写周报、改代码,连续互动20轮,国产类ChatGPT新玩家「天工」来了

国内的类 ChatGPT 赛道&#xff0c;又来了一个重量级玩家。 4 月 17 日&#xff0c;新⼀代大语言模型「天工」正式开启邀请测试。该模型由昆仑万维与奇点智源联合研发&#xff0c;是国内首个对标 ChatGPT 的双千亿级大语言模型。 官网链接&#xff1a;tiangong.kunlun.com 作为…

经典中文歌曲-英文版

经典中文歌曲-英文版 15首&#xff08;第一期&#xff09; 青春派对是大约与小虎队、红唇族同时的台湾演唱组合&#xff0c;歌手资料不详 。主要作品是 经典中文歌曲的英文翻唱&#xff0c;大陆发行过几盘磁带&#xff0c;很快就消声匿迹了。这里介绍给大家 的是由华星唱片公…

ThinkPHP 提示验证码输入错误

最近遇到一个项目中用的是Thinkphp这个框架开发的&#xff0c;其中在登录这块有验证码这个功能&#xff0c;其实这个功能是TP自带的,其中主要方法是buildImageVerify&#xff0c;位于ThinkPHP\Extend\Library\ORG\Util\Image.class.php中。该验证码的机制就是当前台每次重新绘制…

使用图片验证码进行登录验证

需求&#xff1a;后端系统登录时使用图片验证码验证登录 效果&#xff1a; 使用 4 位数字加字母组合验证码登录&#xff0c;相关代码为&#xff1a; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.LineCaptcha;RequestMapping("/getCode") publ…

tp5.1使用验证码类时,验证码图片不显示

一、问题描述 ​在使用 tp5.1 框架中的 验证码类 的时候&#xff0c;准备工作都做好了&#xff0c;但是验证码图片却无法显示&#xff0c;浏览器缓存也清掉了&#xff0c;电脑也重启的&#xff0c;图片路径也没有问题&#xff0c;就是不显示验证码的图片。 1&#xff09;通过co…