基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二)

这篇具有很好参考价值的文章主要介绍了基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

前言

本项目通过爬虫技术获取图片,利用OpenCV库对图像进行处理,识别并切割出人物脸部,形成了一个用于训练的数据集。通过ImageAI进行训练,最终实现了对动漫人物的识别模型。同时,本项目还开发了一个线上Web应用,使得用户可以方便地体验和使用该模型。

首先,项目使用爬虫技术从网络上获取图片。这些图片包含各种动漫人物,其中我们只对人物脸部进行训练,所以我们会对图像进行处理,并最终将这些图像将作为训练数据的来源。

其次,利用OpenCV库对这些图像进行处理,包括人脸检测、图像增强等步骤,以便准确识别并切割出人物脸部。这一步是为了构建一个清晰而准确的数据集,用于模型的训练。

接下来,通过ImageAI进行训练。ImageAI是一个简化图像识别任务的库,它可以方便地用于训练模型,这里用于训练动漫人物的识别模型。

最终,通过项目开发的线上Web应用,用户可以上传动漫图像,系统将使用训练好的模型识别图像中的动漫人物,并返回相应的结果。

总的来说,本项目结合了爬虫、图像处理、深度学习和Web开发技术,旨在提供一个便捷的动漫人物识别服务。这对于动漫爱好者、社交媒体平台等有着广泛的应用前景。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

系统流程图

系统流程如图所示。

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

运行环境

本部分包括爬虫、模型训练及实际应用运行环境。

爬虫

安装Python3.6以上及Selenium3.0.2版本。

详见博客。

模型训练

本部分包括安装依赖、安装ImageAI。

详见博客。

实际应用

实际应用包括前端开发环境和后端环境的搭建。

详见博客。

模块实现

本项目包括4个模块:数据准备、数据处理、模型训练及保存、模型测试,下面分别介绍各模块的功能及相关代码。

1. 数据准备

本项目的数据来自于百度图片,通过爬虫获取。

1)爬虫下载原始图片

下图为下载人物的部分列表。

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

爬虫可根据列表自动下载指定数量的人物图片存放于指定文件夹,相关代码如下:

#phantomjs设置
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100"
)
#根据关键词爬取并下载图片 
#下载基本参数设置,更多参数设置在main()函数处
NAME_LIST = "characters_name_list.txt"  #导入需要获取关键字文件,每个关键字一行
MAX_NUM = 60  #每个关键字下载数量
OUTPUT_PATH = "./Raw"  #下载图片书保存目录
TIME_OUT = 20  #设置超时
DELAY = 1  #随机下载延迟0~1秒,同样防止被服务器识别出爬虫
#产生随机的header,防止被服务器识别出爬虫
def get_random_headers():
    ua = UserAgent().random  #产生随机的User-Agent
    headers = {
				"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
				"Proxy-Connection": "keep-alive",
				"User-Agent": ua,
				"Accept-Encoding": "gzip, deflate, sdch",}
	return headers
	
def get_image_url(keywords, max_number=10000, face_only=False):#获取图像url
    def decode_url(url): #解码url
        in_table = '0123456789abcdefghijklmnopqrstuvw'
        out_table = '7dgjmoru140852vsnkheb963wtqplifca'
        translate_table = str.maketrans(in_table, out_table)
        mapping = {'_z2C$q': ':', '_z&e3B': '.', 'AzdH3F': '/'}
        for k, v in mapping.items():
            url = url.replace(k, v)
        return url.translate(translate_table)
    base_url= "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592"\
               "&lm=7&fp=result&ie=utf-8&oe=utf-8&st=-1"
    keywords_str = "&word={}&queryWord={}".format(
        quote(keywords), quote(keywords))
    query_url = base_url + keywords_str
    query_url += "&face={}".format(1 if face_only else 0)
    init_url = query_url + "&pn=0&rn=30"
    res = requests.get(init_url)
    init_json = json.loads(res.text.replace(r"\'", ""), encoding='utf-8', strict=False)
    total_num = init_json['listNum']
    target_num = min(max_number, total_num)
    crawl_num = min(target_num * 2, total_num)
    crawled_urls = list()
    batch_size = 30
    with futures.ThreadPoolExecutor(max_workers=5) as executor:
        future_list = list()
        def process_batch(batch_no, batch_size):  #批处理
            image_urls = list()
            url = query_url + \
                  "&pn={}&rn={}".format(batch_no * batch_size, batch_size)
            try_time = 0
            while True:
                try:
                    response = requests.get(url)
                    break
                except Exception as e:
                    try_time += 1
                    if try_time > 3:
                        print(e)
                        return image_urls
            response.encoding = 'utf-8'
            res_json = json.loads(response.text.replace(r"\'", ""), encoding='utf-8', strict=False)
            for data in res_json['data']:
                if 'objURL' in data.keys():
                    image_urls.append(decode_url(data['objURL']))
                elif'replaceUrl'in data.keys() and len(data['replaceUrl'])== 2:
                    image_urls.append(data['replaceUrl'][1]['ObjURL'])
            return image_urls
        for i in range(0, int((crawl_num + batch_size - 1) / batch_size)):
            future_list.append(executor.submit(process_batch, i, batch_size))
        for future in futures.as_completed(future_list):
            if future.exception() is None:
                crawled_urls += future.result()
            else:
                print(future.exception())
	return crawled_urls[:min(len(crawled_urls), target_num)]
	
def get_image_url(keywords, max_number=10000, face_only=False):
    def decode_url(url):  #解码
        in_table = '0123456789abcdefghijklmnopqrstuvw'
        out_table = '7dgjmoru140852vsnkheb963wtqplifca'
        translate_table = str.maketrans(in_table, out_table)
        mapping = {'_z2C$q': ':', '_z&e3B': '.', 'AzdH3F': '/'}
        for k, v in mapping.items():
            url = url.replace(k, v)
        return url.translate(translate_table)
    base_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592"\
               "&lm=7&fp=result&ie=utf-8&oe=utf-8&st=-1"
    keywords_str = "&word={}&queryWord={}".format(
        quote(keywords), quote(keywords))
    query_url = base_url + keywords_str
    query_url += "&face={}".format(1 if face_only else 0)
    init_url = query_url + "&pn=0&rn=30"
    res = requests.get(init_url)
    init_json = json.loads(res.text.replace(r"\'", ""), encoding='utf-8', strict=False)
    total_num = init_json['listNum']
    target_num = min(max_number, total_num)
    crawl_num = min(target_num * 2, total_num)
    crawled_urls = list()
    batch_size = 30
    with futures.ThreadPoolExecutor(max_workers=5) as executor:
        future_list = list()
        def process_batch(batch_no, batch_size):
            image_urls = list()
            url = query_url + \
                  "&pn={}&rn={}".format(batch_no * batch_size, batch_size)
            try_time = 0
            while True:
                try:
                    response = requests.get(url)
                    break
                except Exception as e:
                    try_time += 1
                    if try_time > 3:
                        print(e)
                        return image_urls
            response.encoding = 'utf-8'
            res_json = json.loads(response.text.replace(r"\'", ""), encoding='utf-8', strict=False)
            for data in res_json['data']:
                if 'objURL' in data.keys():
                    image_urls.append(decode_url(data['objURL']))
              elif'replaceUrl' in data.keys() and len(data['replaceUrl']) == 2:
                    image_urls.append(data['replaceUrl'][1]['ObjURL'])
            return image_urls
        for i in range(0, int((crawl_num + batch_size - 1) / batch_size)):
            future_list.append(executor.submit(process_batch, i, batch_size))
        for future in futures.as_completed(future_list):
            if future.exception() is None:
                crawled_urls += future.result()
            else:
                print(future.exception())
    return crawled_urls[:min(len(crawled_urls), target_num)]
    
#main函数
def main(list_file, output="./Raw", max_number=100, threads=50, timeout=20, time_delay=3, face_only=True,
         browser="phantomjs", quiet=False, file_prefix="img"):
    with open(list_file, encoding="utf-8") as keywords_list:
        for keywords in keywords_list:
            keywords = keywords.rstrip()  #去除换行符
            if keywords == "":  #跳过空行
                continue
            if os.path.exists(os.path.join(output, keywords)):  #查看是否已经下载
                print("[warn: ] [{}] is already downloaded, downloader will skip [{}]".format(keywords, keywords))
                continue
            crawled_urls = crawler.crawl_image_urls(keywords, max_number=max_number, face_only=face_only,
                                                    browser=browser, quiet=quiet)
            download_images(image_urls=crawled_urls, dst_dir=output, keywords=keywords,
                            concurrency=threads, timeout=timeout,time_delay=time_delay, file_prefix=file_prefix)
            img_count = len(os.listdir(os.path.join(output, keywords)))
            print("[{}]: get {} image(s)".format(keywords, img_count))
            
def download_image(image_url, dst_dir, file_name, timeout=20, time_delay=1):
    time.sleep(random.randint(0, time_delay))  #暂停0~time_delay的整数秒
    response = None
    file_path = os.path.join(dst_dir, file_name)
    try_times = 0
    while True:
        try:
            try_times += 1
            response = requests.get(
                image_url, headers=get_random_headers(), timeout=timeout)
            with open(file_path, 'wb') as f:
                f.write(response.content)
            response.close()
            file_type = imghdr.what(file_path)
            if file_type in ["jpg", "jpeg", "png", "bmp"]:
                new_file_name = "{}.{}".format(file_name, file_type)
                new_file_path = os.path.join(dst_dir, new_file_name)
                shutil.move(file_path, new_file_path)
                print("[OK:]  {}  {}".format(new_file_name, image_url))
            else:
                os.remove(file_path)
                print("[Err:] file type err or not exists {}".format(image_url))
            break
        except Exception as e:
            if try_times < 3:
                continue
            if response:
                response.close()
            print("[Fail:]  {}  {}".format(image_url, e.args))
            break
            
def download_images(image_urls, dst_dir, keywords, file_prefix="img", concurrency=50, timeout=20, time_delay=1):
    with concurrent.futures.ThreadPoolExecutor(max_workers=concurrency) as executor:
        future_list = list()
        count = 0
        dst_dir = os.path.join(dst_dir, keywords)
        if not os.path.exists(dst_dir):
            os.makedirs(dst_dir)
        for image_url in image_urls:
            file_name = file_prefix + "_" + "%04d" % count
            future_list.append(executor.submit(
                download_image, image_url, dst_dir, file_name, timeout, time_delay))
            count += 1
        concurrent.futures.wait(future_list, timeout=180)

结果如图所示。
基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

2)手动筛选图片

部分人物的名称、现实事物或人物有重名现象,加上一些图片质量不佳,需要人为剔除,手动筛选,如图所示。

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二),深度学习,图像识别,学习路线,深度学习,python,opencv,tensorflow,计算机视觉,目标检测,图像处理

相关其它博客

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(一)

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(三)

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。文章来源地址https://www.toymoban.com/news/detail-755402.html

到了这里,关于基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 基于OpenCv和tensorflow的人脸识别设计与实现

    基于OpenCv和tensorflow的人脸识别设计与实现

    项目名称: 基于OpenCv和tensorflow的人脸识别 项目地址:https://gitee.com/yq233/opencv 环境配置: Python tensorflow2 OpenCv categories: 人工智能 description: Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要

    2024年02月03日
    浏览(12)
  • 深度学习实战:基于TensorFlow与OpenCV的手语识别系统

    深度学习实战:基于TensorFlow与OpenCV的手语识别系统

    本期内容:基于TensorFlow与OpenCV的手语识别系统 实验环境: python(3.11.4) tensorflow(2.13.0) cv2(4.8.0) 下载地址:https://download.csdn.net/download/m0_68111267/88518189 这些是Python中的标准库及第三方库及其相关的模块。 具体来说,这个代码导入了以下库: Pandas:数据分析和数据处理库。 NumP

    2024年02月06日
    浏览(14)
  • 基于Python+OpenCV+dlib+Tensorflow深度学习的人脸表情识别系统

    基于Python+OpenCV+dlib+Tensorflow深度学习的人脸表情识别系统

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。   人脸表情识别是一种重要的计算机视觉任务,它涉及到对人脸图像中的表情进行分类和理解。在这个系统中,我们将使用Python、OpenCV、dlib和Tensorflow来实现深度学习模型,以识别人脸表情。

    2024年02月01日
    浏览(10)
  • 基于卷积神经网络的农作物病虫害图像识别(Opencv,Pytorch,Tensorflow,MobileNetV3)

    最近做了一个农作物虫害图像识别的程序,在此分享一下。本文用到的深度学习框架为Tensorflow2,Opencv等等!使用的数据集共有61种类别,分别代表不同的虫害类别。使用的网络模型为moblienetv3. Bi 设 Dai 坐 效果视频如下所示: 农作物虫害图像识别 代码如下所示:

    2024年02月11日
    浏览(10)
  • 基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

    基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

    本项目利用语音文件和方言标注文件,提取语音的梅尔倒谱系数特征,并对这些特征进行归一化处理。在基于标注文件的指导下,构建了一个字典来管理数据。接着,我们选择WaveNet机器学习模型进行训练,并对模型的输出进行softmax处理。最终,经过训练后的模型将被保存以

    2024年02月16日
    浏览(38)
  • 基于OpenCV+Keras+tensorflow 实现的变电站作业管控平台源代码。含人脸识别考勤,移动目标跟踪,越线检测,安全措施检测,姿态识别等功能

    基于OpenCV+Keras+tensorflow 实现的变电站作业管控平台源代码。含人脸识别考勤,移动目标跟踪,越线检测,安全措施检测,姿态识别等功能

    #综述 使用该作业现场安全生产智能管控平台来实现变电站的安全生产的智能化管理,通过人脸识别功能进行人员的考勤; 通过人员、车辆的检测和识别来实现变电站的智能化管理;通过安全行为识别和安全区域报警功能来实现对变电站内人员和设备安全的监督; 完整代码下

    2024年02月10日
    浏览(11)
  • Midjourney AI 绘制动漫人物

    Midjourney AI 绘制动漫人物

    AI 依据照片绘制动漫人物 注册成功以后,打开Midjourney  https://discord.gg/midjourney 1)建议生成专属的服务器: 添加服务器 回到Midjourney newcommer 邀请bot到你的专属服务器 2)在专属的服务器上传图片确定复制链接 /imagine 弹出prompt...... 开始描述图片:例如我写的‘Bigbang style ’生

    2024年02月11日
    浏览(13)
  • 基于Python+OpenCV的手势识别系统:智能家居和智能小车的灯光控制

    基于Python+OpenCV的手势识别系统:智能家居和智能小车的灯光控制

    基于python+opencv的手势识别系统,可控制灯的亮度,智能家居,智能小车。 基于python+opencv的手势识别系统软件。 内含svm模型,和肤色识别,锐化处理。 基于 win10+Python3.7的环境,利用Python的OpenCV、Sklearn和PyQt5等库搭建了一个较为完整的手势识别系统,用于识别日常生活中1-1

    2024年04月15日
    浏览(41)
  • 智能科学毕设分享(算法) 基于opencv的银行卡识别

    智能科学毕设分享(算法) 基于opencv的银行卡识别

    🔥 今天学长向大家分享一个毕业设计项目 🚩 毕业设计 基于opencv的银行卡识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目运行效果: 毕业设计 机器视觉opencv银行卡识别系统 项目获取: https://gitee.com/assistant-a/project-sharing 银

    2024年02月21日
    浏览(10)
  • 动漫3D虚拟人物制作为企业数字化转型提供强大动力

    动漫3D虚拟人物制作为企业数字化转型提供强大动力

    一个 3D 虚拟数字人角色的制作流程,可以分为概念设定-3D 建模-贴图-蒙皮-动画-引擎测试六个步骤,涉及到的岗位有原画师、模型师、动画师等。角色概念设定、贴图绘制一般是由视觉设计师来完成;而建模、装配(骨骼绑定)、渲染动画是由三维设计师来制作完成。这里主要讲

    2024年02月12日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包