Datawhale组队学习|全球AI攻防挑战赛——赛道二:AI核身之金融场景凭证篡改检测

目录

前言

Datawhale 2024.10 组队学习来了!这次选择的是动手实践专区------CV方向------"全球AI攻防挑战赛---赛道二:AI核身之金融场景凭证篡改检测"。

Baseline代码解读

1、读取数据集

bash 复制代码
!apt update > /dev/null; apt install aria2 git-lfs axel -y > /dev/null
!pip install ultralytics==8.2.0 numpy pandas opencv-python Pillow matplotlib > /dev/null
!axel -n 12 -a http://mirror.coggle.club/seg_risky_testing_data.zip; unzip -q seg_risky_testing_data.zip
!axel -n 12 -a  http://mirror.coggle.club/seg_risky_training_data_00.zip; unzip -q seg_risky_training_data_00.zip

(1)!apt update > /dev/null; apt install aria2 git-lfs axel -y > /dev/null
!: 告诉 Jupyter Notebook (或 Google Colab),运行的是 apt update 这个shell 命令,而不是 Python 代码
apt update:更新Ubuntu的包管理器APT的包列表
-y:自动同意安装提示,省去手动确认。
> /dev/null:将输出重定向到/dev/null,相当于忽略输出日志。

安装用于下载文件的工具:

aria2:支持多源下载

git-lfs:用于处理大文件

axel:一个多线程下载工具

(2)!pip install ultralytics==8.2.0 numpy pandas opencv-python Pillow matplotlib > /dev/null

安装一些Python库:

ultralytics==8.2.0:一个开源的YOLOv8框架,用于目标检测、分割等任务。

numpy:用于数值计算的库。

pandas:用于数据处理和分析的库。

opencv-python:用于图像处理的库。

Pillow:用于图像处理的Python库。

matplotlib:用于绘制图形的库。

(3)!axel -n 12 -a http://mirror.coggle.club/seg_risky_testing_data.zip; unzip -q seg_risky_testing_data.zip

使用axel 以12个线程并行下载名为seg_risky_testing_data.zip的文件。下载完成后,使用unzip 命令解压该压缩文件。
-n 12:指定12个线程进行下载
-a:显示下载进度
-q:以安静模式解压(即不显示解压过程的详细信息)

(4)!axel -n 12 -a http://mirror.coggle.club/seg_risky_training_data_00.zip; unzip -q seg_risky_training_data_00.zip

与(3)类似,使用axel以12个线程下载名为seg_risky_training_data_00.zip的文件,并解压。

bash 复制代码
import os, shutil
import cv2
import glob
import json
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

training_anno = pd.read_csv('http://mirror.coggle.club/seg_risky_training_anno.csv')

train_jpgs = [x.replace('./', '') for x in glob.glob('./0/*.jpg')]
training_anno = training_anno[training_anno['Path'].isin(train_jpgs)]
training_anno['Polygons'] = training_anno['Polygons'].apply(json.loads)

training_anno.head()

(1)import *导入库

os 和 shutil:用于文件和目录操作。

cv2:OpenCV库,用于计算机视觉任务(如图像处理)。

glob:用于查找符合特定规则的文件路径名。

json:用于解析和处理JSON格式的数据。

pandas:用于数据处理和分析。

numpy:用于数值计算,提供高效的数组操作。

matplotlib.pyplot:用于绘制图形和可视化数据。

(2)training_anno = pd.read_csv('http://mirror.coggle.club/seg_risky_training_anno.csv')

加载篡改后的凭证图像的位置标注,标注文件以csv格式给出(seg_risky_training_anno.csv),csv文件中包括两列,Path列内容为篡改凭证图像的名称,Polygons列内容采用轮廓点的方式存储每个篡改区域的位置;

使用 pandas 的** read_csv** 函数从指定的 URL 加载 CSV 文件,创建一个 DataFrame,名为training_anno。

(3)training_anno = training_anno[training_anno['Path'].isin(train_jpgs)]

获取训练图像文件列表:glob.glob('./0/*.jpg') 会返回 ./0 目录下所有 JPG 文件的路径。

列表推导式将这些路径中的 './' 替换为空字符串,生成 train_jpgs 列表,包含相对路径的 JPG 文件名。

(4)training_anno = training_anno[training_anno['Path'].isin(train_jpgs)]

条件过滤,保留 training_anno 中仅与训练图像相对应的行。
isin(train_jpgs):检查 training_anno 中的 'Path' 列是否在 train_jpgs 列表中。

(5)training_anno['Polygons'] = training_anno['Polygons'].apply(json.loads)

解析 'Polygons' 列
apply(): 是 pandas DataFrame 或 Series 的方法,它允许对列中的每个元素应用一个函数。这里对 Polygons 列的每个元素应用了 json.loads 函数。
json.loads:将 training_anno 中的 'Polygons' 列应用 json.loads 函数,以将存储为字符串格式的 JSON 数据(字符串,表示存储Polygons坐标的JSON对象)解析为 Python 对象(如字典或列表),为后续的图像处理或模型训练做准备。假如 Polygons 列的某一单元格是 "[ [10, 20], [30, 40], [50, 60] ]",它会将其转换为 Python 列表:[[10, 20], [30, 40], [50, 60]]。

bash 复制代码
training_anno.shape

(63785, 2)

bash 复制代码
np.array(training_anno['Polygons'].iloc[4], dtype=np.int32)
bash 复制代码
idx = 23
img = cv2.imread(training_anno['Path'].iloc[idx])

plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.imshow(img)
plt.title("Original Image")
plt.axis('off')

plt.subplot(122)
img = cv2.imread(training_anno['Path'].iloc[idx])
polygon_coords = np.array(training_anno['Polygons'].iloc[idx], dtype=np.int32)

for polygon_coord in polygon_coords:
    cv2.polylines(img, np.expand_dims(polygon_coord, 0), isClosed=True, color=(0, 255, 0), thickness=2)
    img= cv2.fillPoly(img, np.expand_dims(polygon_coord, 0), color=(255, 0, 0, 0.5))

plt.imshow(img)
plt.title("Image with Polygons")
plt.axis('off')
相关推荐
小陈phd2 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao3 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
猫爪笔记7 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
ZHOU_WUYI7 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1237 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
pq113_67 小时前
ftdi_sio应用学习笔记 3 - GPIO
笔记·学习·ftdi_sio
澄澈i7 小时前
设计模式学习[8]---原型模式
学习·设计模式·原型模式
老艾的AI世界8 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221518 小时前
机器学习系列----关联分析
人工智能·机器学习