今天跟大家唠唠我搞的这个“萝莉射”,别想歪,我说的是用 Python 搞图像识别,识别图片里有没有那种.....比较幼齿的玩意儿。
事情是这么开始的,最近不是严打嘛各种群里风声鹤唳,草木皆兵。为自保,也为净化网络环境(呸,说得我自己都信),我就寻思着搞个自动识别的玩意儿,万一哪天手滑发错,还能有个东西兜底。
得搞定环境。我直接上的 Anaconda,省事儿。装 Python 3.9,然后 pip 一把梭:`pip install tensorflow opencv-python scikit-image`。这几个是必须的,tensorflow 用来做深度学习,opencv 处理图像,scikit-image 搞一些图像预处理。
环境搭就开始找模型。这年头,白嫖才是王道。Google 一圈,发现已经有大佬训练好的模型,可以直接拿来用。我找个据说是识别动漫人物的模型,下下来,大概几百兆。
接下来就是写代码。先用 opencv 把图片读进来:
python
import cv2
img = *('要识别的图片.jpg')
然后把图片缩放到模型需要的大小。一般来说,这种模型都要求输入是固定大小的图片,比如 224x224 或者 299x299。
python
img = *(img, (224, 224))
接着把图片转换成模型需要的格式。有些模型要求输入是 RGB,有些是 BGR,还有些需要归一化到 0 到 1 之间。反正就是各种坑,自己慢慢试。
python
img = img / 255.0 # 归一化
然后把图片喂给模型,得到模型的预测结果。这部分代码 depending on 你的模型而定,没法给出统一的写法。大概就是这样:
python
import tensorflow as tf
model = *.load_model('模型文件.h5')
prediction = *(img[*, ...])
拿到预测结果之后,就是判断图片里有没有“萝莉”。一般来说,模型会输出一个概率值,表示图片里有“萝莉”的可能性。自己设定一个阈值,比如 0.8,如果概率值大于 0.8,就认为图片里有“萝莉”。
python
if prediction[0][0] > 0.8:
print('警告!检测到萝莉!')
else:
print('安全。')
把这些代码整合起来,就是一个简单的“萝莉射”程序。这个程序还很粗糙,识别率也不高,经常会误判。但是至少能过滤掉一部分明显的图片,减少手滑的风险。
这回实践让我深刻体会到,搞这种东西,模型很重要,数据也很重要。如果能搞到大量的高质量的训练数据,然后自己训练一个模型,效果肯定会好很多。但是,我只是个业余玩家,没那个精力。能白嫖就白嫖。
就这样,我的“萝莉射”实践就分享到这里。记住,技术是无罪的,关键在于你怎么用它。千万不要用它来做坏事!
还没有评论,来说两句吧...