paddlenlp:社交网络中多模态虚假媒体内容核查(特征篇)

初赛之特征构造

写在前面

通过前面两篇文章的介绍,我们可以大致的知道模型用到的特征分为四块:qCap,qImg,captions,imgs。根据这些特征,我们得到的模型效果在0.7左右。是否能加入更多的特征,进一步提升模型的效果呢?

通过数据分析,我们发现了部分图片中存在文字且具有判断文本类别的作用。所以,本文采用paddleocr模型来提取图像中的文字特征。

一、安装paddleOCR

在安装paddleOCR前,需要安装依赖组件Shapely

python 复制代码
pip install Shapely

接下来,就可以安装paddleOCR了,也是一行代码就完成安装

python 复制代码
pip install --user paddleocr -i https://mirror.baidu.com/pypi/simple

接下来我们就可以进行测试了

python 复制代码
from paddleocr import PaddleOCR
import os
os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'

captions_list = []
# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
caption = []
img_path = '0.jpg'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    print(res)
    for line in res:
        if line[1][1]>0.9:   # line[1][1]是提取文本的置信度
            print(line[1][0])   # line[1][0]是提取文本
           
# 显示结果
from PIL import Image
result = result[0]
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

测试结果如下

可以发现,识别效果还是不错的。

paddleOCR以ppocr轻量级模型作为默认模型,如果你想尝试更多,可以参考以下链接的第3节自定义模型进行自定义更换。
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/whl.md

二、代码部分

运行该部分代码,可以得到train、test、val各个img文件夹中图片中的文字,一行文字代表一张图片。

python 复制代码
#读取数据
import json
from paddleocr import PaddleOCR
import os
os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'


data_items_train = json.load(open("queries_dataset_merge/dataset_items_train.json",'r',encoding='UTF8'))
data_items_val = json.load(open("queries_dataset_merge/dataset_items_val.json",'r',encoding='UTF8'))
data_items_test = json.load(open("queries_dataset_merge/dataset_items_test.json",'r',encoding='UTF8'))

# 写入txt文件
def load_ocr_captions(context_data_items_dict,queries_root_dir,split):
    if split == 'train':
        fname = 'ocr/ocr_qimg_train.txt'
    if split == 'val':
        fname = 'ocr/ocr_qimg_val.txt'
    if split == 'test':
        fname = 'ocr/ocr_qimg_test.txt'
    # image_path = os.path.join(queries_root_dir,fname)

    # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
    # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
    with open(fname, 'w', encoding="UTF8") as f:
        for key in range(len(context_data_items_dict)):
            print(key)
            captions_list = []
            image_path = os.path.join(queries_root_dir, context_data_items_dict[str(key)]['image_path'])
            ocr = PaddleOCR(use_angle_cls=True, lang="ch",show_log=False)  # need to run only once to download and load model into memory
            result = ocr.ocr(image_path, cls=True)
            for idx in range(len(result)):
                res = result[idx]
                for line in res:
                    if line[1][1] >= 0.8:  # 置信度
                        captions_list.append(line[1][0])
            captions = ",".join(captions_list)
            f.write(captions+'\n')


#### load Datasets ####
train_dump_ocr_captions= load_ocr_captions(data_items_train, 'queries_dataset_merge','train')
val_dump_ocr_captions = load_ocr_captions(data_items_val,'queries_dataset_merge','val')
test_dump_ocr_captions = load_ocr_captions(data_items_test,'queries_dataset_merge','test')

三、模型优缺点

优点是模型识别的准确率较高,缺点是模型不能多线程跑,读完整个数据集耗时1day。建议在入模前就通过ocr采集存储每个图片的文字,后续调用,直接通过图片id匹配即可。

四、写在最后

文本主要展现用什么方法来做数据特征加工,对baseline改动的代码就不贴了,想要的uu们可以私信我。

本次记录主要还是以学习为主,抽了工作之余来进行OCR特征加工。探索了一个带大家最快上手的路径,降低大家的入门难度。

看完觉得有用的话,记得点个赞,不做白嫖党~

相关推荐
辉灰笔记4 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
麦聪聊数据4 小时前
电商大促数据库管控(下):数据需求小时级交付与全链路安全管控
数据库
喜欢的名字被抢了5 小时前
MySQL核心机制:事务、锁与存储引擎
数据库·sql·mysql·教程
JosieBook5 小时前
【数据库】时序数据库通过国测认证,TimechoAI开放体验:工业数据的“存”与“智”如何协同?
数据库·时序数据库
卓怡学长6 小时前
w263基于springboot + vue 健康饮食管理系统
java·数据库·vue.js·spring boot·spring·intellij-idea
阿演8 小时前
DataDjinn v0.2.11:SQL 编辑、AI 协作和表格操作继续打磨
数据库·人工智能·sql
智脑API平台9 小时前
Codex 国内使用会封号吗?账号安全、中转站和合规边界说明
数据库·redis·缓存
l1t9 小时前
duckdb 1.6dev新增的.manual命令
开发语言·数据库
辉灰笔记9 小时前
第一篇:MySQL8.0生产备份实战|XtraBackup全自动全量+增量备份(钉钉告警+异地Binlog归档)
数据库·mysql·钉钉·运维开发
山峰哥9 小时前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先