我tmd 烦死了,没有数据集?不好意思,我要白嫖!

2023-10-19 16:40

本文主要是介绍我tmd 烦死了,没有数据集?不好意思,我要白嫖!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI算法与图像处理”,选择加"星标"或“置顶

重磅干货,第一时间送达


推荐阅读31个Python实战项目教你掌握图像处理,PDF开放下载opencv_contrib扩展模块中文教程pdf,限时领取

上一篇我们讲到了如何白嫖一些免费的GPU

白嫖GPU,我们是认真的!

人工智能的发展离不开:数据、算法、算力 今天要分享的内容是关于数据如何获取 除了一些开源的数据集以及手动标注以外,我们是否还有其他办法获取呢?答案肯定是有的 我们可以利用一些平台提供的接口来白嫖数据集,来训练我们自己的模型,这样就变成我们的东西了,小机灵鬼,这是实际工作中非常有用。

当然要注意,调用这些平台的接口,实际上你的数据和标注数据也同样被平台获取了,如果是机密的数据,不建议这样子用。

本文以预测颜值的数据集获取为例,来进行分析

推荐项目:https://github.com/HCIILAB/SCUT-FBP5500-Database-Release (含数据集)

预测颜值可以看做是分类问题,也可以是回归问题。但无论是采用哪种方法去做,最基础的是要获取一张图片中人脸的位置信息 + 对应的颜值评分 

测试图片:

结果:

看上去好像很复杂,实际上这些都可以用一个json来存储 描述一下json的信息 指出人脸的坐标,颜值,年龄等信息

接下来就是如何通过这些平台开放的免费接口来白嫖了 以百度的为例

大致步骤:

1、注册

2、代码编写

今天我们以百度的API 为例,获取颜值评分等标注信息。

1、注册账号

首先需要去 百度云平台(当然也可以去其他开放平台)注册一个账号,并创建一个应用 具体如下: 

平台的地址:https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F#/ai/roboticvision/overview/index

注册 & 应用创建说明:

http://www.atyun.com/35233.html

按照上述教程,创建应用之后,获取我们最关心的三个东西:

AppID、API Key、 Secret Key

接下来看一下我们可以白嫖的内容有哪些

可以白嫖的东西很多,包括文字识别、身份证识别、车票识别、以及我们今天要用的颜值预测(属于人脸属性分析这块) 具体链接:https://cloud.baidu.com/product/face/detect

不过这些都是有一定限制的,比如每日的调用次数,毕竟白嫖嘛,不能太嚣张了

查看可以调用的类型 具体网址:

https://console.bce.baidu.com/ai/?_=1611544091386#/ai/roboticvision/overview/index 

官方提供了一个在线上传获取结果的接口,但是对于我们来说,这远远不够。 

 

因此,我们需要一个脚本能够批量的获取这些数据。

2、代码实现

from time import sleep
from aip import AipFace
import cv2
import base64
import numpy as np
import os
import traceback
import json
import tqdm
##cv2转base64
def cv2_base64(image):base64_str = cv2.imencode('.jpg', image)[1].tobytes()base64_str = base64.b64encode(base64_str)return base64_str
##base64转cv2
def base64_cv2(base64_str):imgString = base64.b64decode(base64_str)nparr = np.fromstring(imgString, np.uint8)image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)return image""" 你的 APPID AK SK """ 
APP_ID = '*****'
API_KEY = '*****'
SECRET_KEY = '*****'client = AipFace(APP_ID, API_KEY, SECRET_KEY)
imageType = "BASE64"
""" 如果有可选参数 """
options = {}
options["face_field"] = "age,beauty"
options["max_face_num"] = 2
options["face_type"] = "LIVE"
options["liveness_control"] = "LOW"error_time = 0
def predict(img_path):"""使用百度API 调用接口 返回人脸相关数据(年龄,颜值,矩形框位置等等):param img_path: 图片路径:return:"""result = {"error_code": -1}try:# opencv 方式读取 读取出来为numpyimg_cv = cv2.imread(img_path)img_cv = A.SmallestMaxSize(256)(image=img_cv)["image"]# numpy -> base64 注意需要在最后加个 decodeimage = cv2_base64(img_cv).decode('utf-8')for i in range(3):""" 带参数调用人脸检测 """result = client.detect(image, imageType, options)error_code = result["error_code"]if error_code == 0 or error_code == 222202:return resultsleep(1.0)print(f"the {i+1} try error!")print(img_path)print(result)except Exception as e:print(traceback.format_exc())return resultdef write_label_json(label_json_path, result):"""将json写入到指定的文件下:param label_json_path:写入的文件名称:param result: 字典:return:"""with open(label_json_path, "w") as f:json.dump(result,f)def write_log(log_path, msg):with open(log_path, "a+") as f:f.write(msg)def make_label_json(root_path, img_path_name):"""label制作:param root_path: 数据集存在的根目录:param img_path_name: 图片存在的目录名称:return:"""img_root_path = os.path.join(root_path, img_path_name)img_name_ls = os.listdir(img_root_path)img_path_ls = [os.path.join(img_root_path, img_name) for img_name in img_name_ls]label_root_path = os.path.join(root_path, "label_json")if not os.path.exists(label_root_path):os.mkdir(label_root_path)log_path = os.path.join(root_path, "error_img.txt")write_log(log_path, "-----------------------------------\n")error_json_dir_path = os.path.join(root_path, "error_json")if not os.path.exists(error_json_dir_path):os.mkdir(error_json_dir_path)success_counts = 0for i, img_path in tqdm.tqdm(list(enumerate(img_path_ls))):result = predict(img_path)img_name = img_name_ls[i]name, ext = os.path.splitext(img_name)label_name = name + ".json"label_json_path = os.path.join(label_root_path, label_name)if result["error_code"] != 0:write_log(log_path, img_path + "\n")write_label_json(os.path.join(error_json_dir_path, label_name), result)else:success_counts += 1write_label_json(label_json_path, result)sleep(0.5)if i % 100 == 0:print("成功检测:", success_counts)print("成功检测:", success_counts)root_path = "./"
img_path_name = "test"
make_label_json(root_path, img_path_name)

可能存在的问题:

# 1、no module named 'aip'
pip install baidu_aip
# 2、如果需要在vscode 中方便的查看 json文件, 可以考虑
# 安装json-tools
使用 ctrl + alt + m,切换显示风格

文件格式

将所有需要标注的图片,都放在 test 文件夹下

最终输出结果会报错在 error_json和 label_json 文件夹下

打开一个json文件看看里面的内容:

可以看到有我们需要的颜值信息(beauty),人脸位置、年龄信息等等

剩下的就是将获取的标注信息转换成模型需要的格式即

总结

是不是非常的实用

利用现有平台和工具生产我们所需要的东西,是非常重要的技能,如果对你有帮助,可以给我来三连!这是我周末加班写文章的动力!


个人微信(如果没有备注不拉群!)
请注明:地区+学校/企业+研究方向+昵称下载1:何恺明顶会分享
在「AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析
下载2:终身受益的编程指南:Google编程风格指南
在「AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!下载3 CVPR2020在「AI算法与图像处理」公众号后台回复:CVPR2020,即可下载1467篇CVPR 2020论文
觉得不错就点亮在看吧

这篇关于我tmd 烦死了,没有数据集?不好意思,我要白嫖!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241046

相关文章

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名