码农是吃青春饭的吗 (码农是怎么划分的)

码农都是怎么来的,码农给了很多代码怎么看

前段时间老婆在家里刷电视剧【少年派】 挺喜欢里面的人物,于是在空闲之余整了这段代码,提取了一下里面的人物,做个分享, 代码是Python写的,作为一个PHP的开发者,Python代码写的有点烂,将就着看吧!代码结构如下:

码农都是怎么来的,码农给了很多代码怎么看

getImg 目录下面 getImg.py 是程序的所有包:

import cv2

import math

import os

import config

from PIL import Image

import operator

from functools import reduce

from aip import AipFace

import base64

import imageio


def video_to_img(vide_name):
    mp4 = cv2.VideoCapture("video/" + vide_name)  # 读取视频
    is_opened = mp4.isOpened()
    fps = mp4.get(cv2.CAP_PROP_FPS)
    print(fps)
    widght = mp4.get(cv2.CAP_PROP_FRAME_WIDTH)  # 获取视频的宽度
    height = mp4.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 获取视频的高度
    print(str(widght) + "x" + str(height))
    i = 1
    j = 1
    while is_opened:
        (flag, frame) = mp4.read()
        if i % (int(fps)) == 0:
            file_name = "image/" + str(j) + ".jpg"
            if flag == True:
                cv2.imwrite(file_name, frame, [cv2.INTER_AREA])  # 保存图片
            j += 1
        i += 1
        cv2.waitKey(1)
    mp4.release()


video_to_img() 方法是把我*载下**的视频 切成图片,切的效果如下:

码农都是怎么来的,码农给了很多代码怎么看

在这里需要注意的是:

 if i % (int(fps)) == 0:
            file_name = "image/" + str(j) + ".jpg"

我按照帧去存储图片的,如果直接去存储的话 电脑 会黑屏.

切完图片以后, 由于 重复的太多,刚开始 写一个一段 图片 相似度比较 然后 把 相同的图片 给清洗掉,后来发现没有用上,代码如下:

def compare_image(file_image_one, file_image_two):
    image1 = Image.open(file_image_one)
    image2 = Image.open(file_image_two)
    histogram1 = image1.histogram()
    histogram2 = image2.histogram()

    differ = math.sqrt(
        reduce(operator.add, list(map(lambda a, b: (a - b) ** 2, histogram1, histogram2))) / len(histogram1))
    # print(differ)
    return differ

这个方法 返回的是 两张图片相似度比较 differ 值越小 越相似, 然后做了清洗, 但是整完这些以后 人物头像 只留下了 几个 没啥用 于是 这个方法放弃了.

用百度人脸识别API清洗

最后使用了 百度的 人脸识别API进行了清洗 把 带有头像的 图片给筛选出来,代码如下:

def check_face_img(image_path):
    image_str = get_image_base64(image_path)
    client = AipFace(config.APP_ID, config.APP_KEY, config.SECRET_KEY)
    imageType = "BASE64"
    # print(client.detect(image_str, imageType)['error_code'] != 0)
    if client.detect(image_str, imageType)['error_code'] != 0:
        # print('没有人脸的图片===>' + image_path)
        delete_no_face(image_path)

清洗以后就留下了,所有的人像, 但是 在这里 清洗的时候需要注意,由于图片有 4000多张图片, 清洗一次 不一定清洗完全 于是 就清洗了多次,然后留下的 2000多张,效果如下:

码农都是怎么来的,码农给了很多代码怎么看

然后得到这么多图片,没啥用, 就挑了一些,做了个 gif 图.

做GIF 图:

def image_Intercept(image_path, image):
    img = Image.open(image_path + image)
    # 图片尺寸
    img_size = img.size
    h = img_size[1]  # 图片高度
    w = img_size[0]  # 图片宽度
    x = 0
    y = 0
    w = w - 200
    h = h - 100
    region = img.crop((x, y, x + w, y + h))
    region.save(image_path + '\image_Intercept\\' + image)

由于 生成的图片上面有 对话 和 电视剧的标识,所以整了上面的代码 裁剪 掉 生成 新的 没有对话 和 电视剧的 标识.

def create_gif(image_list, gif_name, image_path):
    frames = []
    print(image_list)
    for image_name in image_list:
        if image_name.endswith('.jpg'):
            print(image_name)
            frames.append(imageio.imread(image_path + '\\' + image_name))
    imageio.mimsave(image_path + '\\' + gif_name, frames, 'GIF', duration=0.2)

最后,使用了上面的代码生成了 gif 图

整完, 最后整一句, 我也不知道这图片 或者 gif 能干啥, 有点子的来留言说说。