当前位置: 首页 > news >正文

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

初赛之特征构造

  • 写在前面
  • 一、安装paddleOCR
  • 二、代码部分
  • 三、模型优缺点
  • 四、写在最后

写在前面

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

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

一、安装paddleOCR

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

pip install Shapely

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

pip install --user paddleocr -i https://mirror.baidu.com/pypi/simple

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

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文件夹中图片中的文字,一行文字代表一张图片。

#读取数据
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 memoryresult = 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特征加工。探索了一个带大家最快上手的路径,降低大家的入门难度。

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

http://www.lryc.cn/news/195395.html

相关文章:

  • 【网络】总览(待更新)
  • 策略模式——多重if-else解决方案
  • CTAmap 1.12版本2013年-2023年省市县矢量数据更新
  • 【Linux初阶】多线程3 | 线程同步,生产消费者模型(普通版、BlockingQueue版)
  • JUC并发编程——四大函数式接口(基于狂神说的学习笔记)
  • 【2】c++11新特性(稳定性和兼容性)—>超长整型 long long
  • AI算法检测对无人军用车辆的MitM攻击
  • 运维 | 如何在 Linux 系统中删除软链接 | Linux
  • Jmeter接口测试:jmeter导入和导出接口的处理
  • 一文了解 Go fmt 标准库的常用占位符及其简单使用
  • Linux命令(94)之history
  • Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?
  • 【代码随想录】算法训练营 第三天 第二章 链表 Part 1
  • winform开发经验(1)——调用Invoke更新UI时程序卡死原因以及解决办法
  • JNI 的数据类型以及和Java层之间的数据转换
  • EFLK与logstash过滤
  • docker jenkins
  • 单例模式之「双重校验锁」
  • 2023年中国商业版服务器操作系统市场发展规模分析:未来将保持稳定增长[图]
  • BIM如何通过3D开发工具HOOPS实现WEB轻量化?
  • Unity 3D基础——通过四元数控制对象旋转
  • python--短路运算,把0、空字符串和None看成 False,其他数值和非空字符串都看成 True
  • 《算法通关村第一关——链表青铜挑战笔记》
  • 【深度学习实验】循环神经网络(四):基于 LSTM 的语言模型训练
  • IOS课程笔记[1-3] 第一个IOS应用
  • Flink的基于两阶段提交协议的事务数据汇实现
  • 树模型(三)决策树
  • vueday01——使用属性绑定+ref属性定位获取id
  • LeetCode 260. 只出现一次的数字 III:异或
  • 使用PyTorch解决多分类问题:构建、训练和评估深度学习模型