Discord Bot 과 얼굴 인식을 조합해 보았다~LT용~

소개



LT에서 발표하는 자료

지금까지 온 얼굴 인식 (OpenCV)을 봇화 해 보았습니다.
※ 얼굴 인식 기사가 아직 정리되어 있지 않습니다(;・∀・)

물품 쓰기는 아래와 같이
  • 왜, Discord?
  • 모듈, 디렉토리 구조 등
  • Discord Bot

  • 왜 Discord?



    어쩐지입니다!

    지금까지 Slack Bot으로 이미 만들었습니다.

    하지만 LINE Bot도 뭔가…

    그렇다, Discord 라고 봇 만들 수 있잖아? ? ?

    Discord Bot에 대해 조사했습니다.

    공식 (discord.py)

    뭔가 재미있을 것 같아서 만들어 보았습니다 ☆

    Discord bot 만드는 법 는 요 전날 UP했습니다.
    (조금 잡지만 ...)

    모듈, 디렉토리 구조 등



    모듈



    필요한 것은 다음과 같습니다.
    필요한 것은 설치하십시오!
    pip install discord       # discordでいろいろしたいときに使用
    pip install opencv-python # OpenCVの機能を使用するときに必要(python上ではcv2で使う)
    pip install os            # osに依存している機能を利用できる
    pip install requests      # HTTP通信をするときに使用
    pip install shutil        # ファイルやファイルの集まりに対する高水準の操作方法
    

    디렉토리 구조



    디렉토리 구조는 다음과 같습니다.
    -- dis_test
       -- cascade
          -- haarcascade_frontalface_alt.xml
       -- img
       -- dis.py
    

    얼굴 학습 데이터는 여기을 사용했습니다.

    Discord Bot



    프로그램



    dis_bot.py
    # coding:utf-8
    
    import discord
    import time
    import requests
    import shutil
    import cv2
    import os
    
    # from scripts.photo_processing import PhotoProcessing
    
    IMG_PATH = "./img/"
    IMG_SIZE = (128, 128)
    
    FACE_CASCADE_PATH = "./cascade/haarcascade_frontalface_alt.xml"
    FACE_CASCADE = cv2.CascadeClassifier(FACE_CASCADE_PATH)
    TOKEN = "TOKEN ID"
    client = discord.Client()
    
    now_time = time.time()
    times = time.gmtime(now_time)
    
    # bot起動時処理
    @client.event
    async def on_ready():
        channel = client.get_channel(チャンネルID)
        await channel.send("やぁ!元気かい?")
    
    # message を受け取ったとき
    @client.event
    async def on_message(message):
        # 送り手がボットの場合、無視
        if message.author.bot:
            return
    
        if message.content.startswith('trim') and len(message.attachments) != 0:
            channel_id = message.channel.id
            url = message.attachments[0].url
            file_name = url.rsplit("/", 1)[1]
    
            # 画像保存
            rst = requests.get(url, stream = True)
    
            open_file = open(IMG_PATH + file_name, "wb")
            shutil.copyfileobj(rst.raw, open_file)
            open_file.close()
    
            # 画像精査
            img_file = cv2.imread(IMG_PATH + file_name, cv2.IMREAD_COLOR)
    
            # processing
            gray_file = cv2.cvtColor(img_file, cv2.COLOR_BGR2GRAY)
            front_face_list = FACE_CASCADE.detectMultiScale(gray_file, minSize=(50, 50), minNeighbors=3)
    
            if len(front_face_list) > 0:
                # trimming
                for (x, y, width, height) in front_face_list:
    
                    trim_file = img_file[y:y+height, x:x+width]
                    trim_file = cv2.resize(trim_file, IMG_SIZE)
    
                    cv2.imwrite("{0}trim_{1}".format(IMG_PATH, file_name), trim_file)
    
                    await message.channel.send('', file=discord.File("{0}trim_{1}".format(IMG_PATH, file_name)))
            else:
                await message.channel.send("顔が認証されませんでした。")
    
            # 画像削除
            os.remove(IMG_PATH + file_name)
            os.remove("{0}trim_{1}".format(IMG_PATH, file_name))
    
    client.run(TOKEN)
    

    출력 결과
    명령줄


    제대로 얼굴을 인식하고 트리밍해준다


    물론 여러 사람도 잘라낼 수 있습니다.


    트리밍한 이미지는 아이콘이라든지 사용할 수 있을 것 같네요! (사용하지 않지만)
    이상, Discord Bot × 얼굴 인식 정리였습니다 - (˘ω˘)

    좋은 웹페이지 즐겨찾기