Discord Bot 과 얼굴 인식을 조합해 보았다~LT용~
소개
LT에서 발표하는 자료
지금까지 온 얼굴 인식 (OpenCV)을 봇화 해 보았습니다.
※ 얼굴 인식 기사가 아직 정리되어 있지 않습니다(;・∀・)
물품 쓰기는 아래와 같이
왜 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 × 얼굴 인식 정리였습니다 - (˘ω˘)
Reference
이 문제에 관하여(Discord Bot 과 얼굴 인식을 조합해 보았다~LT용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/str32/items/373e48f4b1e6f4befa8c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
모듈
필요한 것은 다음과 같습니다.
필요한 것은 설치하십시오!
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 × 얼굴 인식 정리였습니다 - (˘ω˘)
Reference
이 문제에 관하여(Discord Bot 과 얼굴 인식을 조합해 보았다~LT용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/str32/items/373e48f4b1e6f4befa8c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 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)
Reference
이 문제에 관하여(Discord Bot 과 얼굴 인식을 조합해 보았다~LT용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/str32/items/373e48f4b1e6f4befa8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)