python动图自动识别_python 自动识别黄图

from watchdog.observers import Observer

from watchdog.events import *

import time

import sys

import os

import _io

from collections import namedtuple

from PIL import Image

import argparse

class Nude(object):

Skin = namedtuple("Skin", "id skin region x y")

def __init__(self, path_or_image):

# 若 path_or_image 为 Image.Image 类型的实例,直接赋值

if isinstance(path_or_image, Image.Image):

self.image = path_or_image

# 若 path_or_image 为 str 类型的实例,打开图片

elif isinstance(path_or_image, str):

self.image = Image.open(path_or_image)

# 获得图片所有颜色通道

bands = self.image.getbands()

# 判断是否为单通道图片(也即灰度图),是则将灰度图转换为 RGB 图

if len(bands) == 1:

# 新建相同大小的 RGB 图像

new_img = Image.new("RGB", self.image.size)

# 拷贝灰度图 self.image 到 RGB图 new_img.paste (PIL 自动进行颜色通道转换)

new_img.paste(self.image)

f = self.image.filename

# 替换 self.image

self.image = new_img

self.image.filename = f

# 存储对应图像所有像素的全部 Skin 对象

self.skin_map = []

# 检测到的皮肤区域,元素的索引即为皮肤区域号,元素都是包含一些 Skin 对象的列表

self.detected_regions = []

# 元素都是包含一些 int 对象(区域号)的列表

# 这些元素中的区域号代表的区域都是待合并的区域

self.merge_regions = []

# 整合后的皮肤区域,元素的索引即为皮肤区域号,元素都是包含一些 Skin 对象的列表

self.skin_regions = []

# 最近合并的两个皮肤区域的区域号,初始化为 -1

self.last_from, self.last_to = -1, -1

# 色情图像判断结果

self.result = None

# 处理得到的信息

self.message = None

# 图像宽高

self.width, self.height = self.image.size

# 图像总像素

self.total_pixels = self.width * self.height

def resize(self, maxwidth=1000, maxheight=1000):

"""

基于最大宽高按比例重设图片大小,

注意:这可能影响检测算法的结果

如果没有变化返回 0

原宽度大于 maxwidth 返回 1

原高度大于 maxheight 返回 2

原宽高大于 maxwidth, maxheight 返回 3

maxwidth - 图片最大宽度

maxheight - 图片最大高度

传递参数时都可以设置为 False 来忽略

"""

# 存储返回值

ret = 0

if maxwidth:

if self.width > maxwidth:

wpercent = (maxwidth / self.width)

hsize = int((self.height * wpercent))

fname = self.image.filename

# Image.LANCZOS 是重采样滤波器,用于抗锯齿

self.image = self.image.resize((maxwidth, hsize), Image.LANCZOS)

self.image.filename = fname

self.width, self.height = self.image.size

self.total_pixels = self.width * self.height

ret += 1

if maxheight:

if self.height > maxheight:

hpercent = (maxheight / float(self.height))

wsize = int((float(self.width) * float(hpercent)))

fname = self.image.filename

self.image = self.image.resize((wsize, maxheight), Image.LANCZOS)

self.image.filename = fname

self.width, self.height

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值