728x90

구름 IDE에서 IndexError 가 발생하는 경우!

* 오류내용
Traceback (most recent call last):
File "application.py", line 12, in 
application.run(host='0.0.0.0', port=int(sys.argv[1]))
IndexError: list index out of range
from flask import Flask

application = Flask(__name__)


@application.route("/")
def hello():
    return "Hello goorm!"


if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

위 코드에서 application.run(host='0.0.0.0', port=5000, threaded=True) 로 코드를 바꿨음에도 저장을 누르지 않아서 기존 코드인 application.run(host='0.0.0.0', port=int(sys.argv[1]))으로 실행되는 것 같습니다.

저장이 안 되면 상단 메뉴바 application.py 옆에 * 모양으로 뜹니다. 

==> ctrl + s 눌러서 저장해주시면 정상적으로 작동합니다.

 

또한 '프로젝트-실행 URL과 포트'에서 설정한 포트와 코드 내의 포트가 다르다면 실행은 되더라도 외부에서 접근이 불가능하니 꼭 맞춰주세요!

 

해당 내용을 공유해주신 const4nt0228님 정말 감사합니다!

728x90
728x90

1. 사용자 발화

나의 봇 - 카카오 i 오픈 빌더 (kakao.com)

 

카카오 i 오픈빌더

Make your kakao I. 손쉽게 카카오 AI기술을 활용하도록 누구에게나 제공하는 kakao I 개발 플랫폼을 만나보세요.

i.kakao.com

위 이미지를 클릭하여 다시 챗봇을 만들러 가겠습니다.

챗봇 이동

카카오톡 챗봇 만들기 2편에서 만들었던 챗봇으로 이동합니다!

아직 안 만드신 분들을 아래 이미지를 클릭하여 생성해주세요!

[python] 카카오톡 챗봇 만들기 2 - Flask :: 초보 개발자 (tistory.com)

 

[python] 카카오톡 챗봇 만들기2 - Flask

드디어 승인 메시지가 도착했습니다! 승인 메시지를 확인하러 아래 이미지를 클릭해주세요. 받은 메일함 | 카카오 메일 (kakao.com) 카카오메일 새로운 시작, 카카오메일 mail.kakao.com 아래 이미지를

novice-engineers.tistory.com

0123456789101112
챗봇 테스트

위 슬라이드 쇼를 참고해주세요. (이미지가 크다 보니 클릭으로 확대하면서 참고해주세요!)

1. 사용자 발화 아래 박스에 말티즈 입력
2. 1과 같이 시츄도 추가 + 시츄 오른쪽에 화살표 더블 클릭 + 엔티티 박스가 뜨는 것 확인
3.  전체 엔티티 클릭 + 목록 확인 + 새 엔티티로 추가하기 버튼 클릭
4. 엔티티 이름을 Animal_type입력
5. 아래 박스에 강아지 입력 후 엔터
6. 아래 강아지가 생성되면 + 오른쪽 박스에 시츄 입력 후 엔터
7. 동일한 방법으로 생성해주시고 + 저장 버튼 클릭 후 닫기
8. F5를 누르시면 + 작성했던 말티즈와 시츄가 없어지는 것 확인
9. 다시 말티즈와 시츄를 입력해주시고 + 파란색 밑줄이 그어지는지 확인
10. 시츄의 이름만 드래그하고 + 추천 엔티티 박스가 뜨면 + @Animal_type을 클릭
11. 블록 이름을 지정 후 + 저장 버튼 클릭 + 봇테스트 버튼 클릭
12. 봇테스트 채팅창의 새로고침 버튼 클릭 + 시츄 입력 후 엔터
13. 결과 확인

 

2. 코드 작성 & 서버 작동

from flask import Flask, request, jsonify

application = Flask(__name__)

@application.route("/")
def hello():
    return "Hello goorm!"

@application.route("/animal",methods=['POST'])
def animal():
    req = request.get_json()
    
    animal_type = req["action"]["detailParams"]["Animal_type"]["value"]	# json파일 읽기

    answer = animal_type
    
    # 답변 텍스트 설정
    res = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": answer
                    }
                }
            ]
        }
    }

    # 답변 전송
    return jsonify(res)

if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

 

위 코드를 전부 다 2편에서 만들었던 구름 IDE 컨테이너 application.py에 붙여 넣기 해주세요!

https://ide.goorm.io/my/dashboard

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

# 주의!

animal_type = req["action"]["detailParams"]["Animal_type"]["value"] 부분에서 Animal_type은 저희가 만들었던 이름 그대로 넣어주셔야 합니다!

URL

2편에서 만들었던 URL을 그대로 복사해주세요!

그리고 위 코드에서 @application.route("/animal",methods=['POST'])이 부분에서 저희가 route 즉, 접속할 url을 /animal로 했다는 의미이기 때문에 위에서 복사한 URL/animal 을 복사해주세요

※ 이해가 안가시는 분들을 위해서! 

https://chatbot2-xnpzr.run.goorm.io/animal   : 제 url은 이러한 형태가 됩니다. 만드신 URL을 복사해주세요

 

3. 챗봇 완성하기

01234
챗봇 설정

위 슬라이드 쇼를 참고해주세요. (이미지가 크다 보니 클릭으로 확대하면서 참고해주세요!)

1. 상단 메뉴바에서 스킬 버튼 클릭 + 이동 후 생성 버튼 클릭
2. 스킬 이름 작성 + URL 붙여 넣기 + 저장 버튼 클릭
3. 상단 메뉴바에서 시나리오 버튼을 클릭하여 다시 시나리오 페이지로 이동
+ 스킬 선택 박스에서 2번에서 생성한 이름 클릭
4. 아래로 내려서 봇 응답의 스킬데이터 클릭 + 저장 버튼 클릭 + 봇테스트 클릭
5. 봇테스트 박스에서 새로고침 버튼 클릭 + 테스트하기 + 결과 확인

4. 카카오톡에 배포하기

0123
배포하기

위 슬라이드 쇼를 참고해주세요. 

1. 상단 메뉴바에서 설정 클릭 + 운영 채널 연결에서 계정 클릭 + 저장 클릭
=> 저는 이미 채널을 운영 중인 계정이 있어서 방법만 올려드리겠습니다!
2. 결과 확인 
3. 상단 메뉴바에서 배포 클릭 + 배포 버튼 클릭
4. 결과 확인

 

5. 핸드폰에서 배포 확인하기

결과

 

728x90
728x90

드디어 승인 메시지가 도착했습니다! 

승인 메시지를 확인하러 아래 이미지를 클릭해주세요.

받은 메일함 | 카카오 메일 (kakao.com)

 

카카오메일

새로운 시작, 카카오메일

mail.kakao.com

승인 메시지

 

아래 이미지를 클릭하여 챗봇을 만들러 가보겠습니다.

나의 봇 - 카카오 i 오픈 빌더 (kakao.com)

 

카카오 i 오픈빌더

Make your kakao I. 손쉽게 카카오 AI기술을 활용하도록 누구에게나 제공하는 kakao I 개발 플랫폼을 만나보세요.

i.kakao.com

 

1. 챗봇 생성

012
챗봇 생성 순서

 

위 슬라이드 쇼를 참고해주세요.

1. 노란색 +버튼 클릭

2. 카카오톡 챗봇 박스 클릭

3. 이름 작성 + 확인 버튼 클릭

 

2. 서버 구축

구름 IDE를 사용하여 3분 만에 정말 간단하게 서버를 구축해보겠습니다.

https://ide.goorm.io/my/dashboard

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

0123456789
구름IDE 컨테이너 생성

위 슬라이드 쇼를 참고해주세요.

1. 회원가입 & 로그인

2. 컨테이너 생성
3. 이름 작성 + 설명 작성 + 스크롤 내리기
4. Flask 클릭 + 생성 클릭
5. 기다리다가 컨테이너 생성되면 컨테이너 실행 버튼 클릭
5. application.py 더블 클릭
6. 하단 터미널 부분에 pip install flask 입력 후 엔터
7. 결과 확인!
8. 하단 터미널 부분에 pip install --upgrade pip 입력 후 엔터
9. 결과 확인!

01234567
서버 설정

위 슬라이드 쇼를 참고해주세요.

1. 상단 메뉴바에 있는 프로젝트 클릭 + 실행 URL과 포트 클릭
2. URL복사 + Port 번호 클릭
3. 5000 입력 후 엔터를 누르면 변경 메시지가 뜨는데 기다리기
4. 변경이 완료되면 확인 버튼 클릭 + 적용 버튼 클릭 + 확인 버튼 클릭
5. 코드 넣기 (하단에 코드 복사 붙여 넣기 해주세요!)
6. python application.py 입력 후 서버 실행시키기
7. 결과가 나오면
8. 2번에서 복사한 URL로 이동하여 결과 확인

9. 정상적으로 작동됐으면 Ctrl + C로 종료 (실패한 경우 댓글로 남겨주세용~!)

from flask import Flask

application = Flask(__name__)


@application.route("/")
def hello():
    return "Hello goorm!"


if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

# 간단하게 URL을 붙여 넣었을 때 "Hello goorm!"이 출력되는 이유는 return값인 Hello goorm! 을 화면에 출력해 준다고 생각해주세요!

 

위 결과가 나오면 간단하게 서버 설정은 완료되었습니다.

구름 IDE로 간단하게 서버 설정하는게 가장 좋은 방법인 것 같아요!

 

위 파이썬 코드를 돌릴 때 오류가 발생하시는 분은 아래 URL을 참고해 주세요!

https://novice-engineers.tistory.com/31

 

[python] 10분만에 카카오톡 챗봇 만들기 [오류 해결] - Flask

구름 IDE에서 IndexError 가 발생하는 경우! * 오류내용 Traceback (most recent call last): File "application.py", line 12, in application.run(host='0.0.0.0', port=int(sys.argv[1])) IndexError: li..

novice-engineers.tistory.com

728x90
728x90

2장 카카오톡 상품 검출 API는 이미지 콘텐츠를 분석해서 상품들의 위치와 종류를 검출합니다.

필요한 이미지 첨부합니다!

shop.jpg
0.48MB
shop2.jpg
0.33MB
shop3.jpg
0.51MB
shop4.jpg
0.40MB

추가적으로 얼굴 이미지를 구하실 분들은 아래 링크에서 이미지를 다운로드하세요!

저작권이 없는 이미지 사이트입니다. --> pixabay.com/

1. REST API

앱키

REST API 키를 복사해주세요.

2. 테스트 python 코드

import sys
import argparse
import requests
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO

API_URL = 'https://dapi.kakao.com/v2/vision/product/detect'
MYAPP_KEY = '위 1에서 복사한 RESTAPI키'

def detect_product(filename):
    headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)}
    try:
        files = { 'image' : open(filename, 'rb')}
        resp = requests.post(API_URL, headers=headers, files=files)
        resp.status_code
        #print(resp.json())
        return resp.json()
    except Exception as e:
        print(str(e))
        sys.exit(0)

def show_products(filename, detection_result):
    try:
        image = Image.open(filename)
    except Exception as e:
        print(str(e))
        sys.exit(0)
    draw = ImageDraw.Draw(image)
    for obj in detection_result['result']['objects']:
        x1 = int(obj['x1']*image.width)
        y1 = int(obj['y1']*image.height)
        x2 = int(obj['x2']*image.width)
        y2 = int(obj['y2']*image.height)
        draw.rectangle([(x1,y1), (x2, y2)], fill=None, outline=(255,0,0,255))
        draw.text((x1+5,y1+5), obj['class'], (255,0,0))
    del draw
    return image

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='상품 인식')
    #1.parser.add_argument('image_file', type=str, nargs='?',default="./kakao_test/Image/shop4.jpg",help='image url to show product\'s rect')
    #2.parser.add_argument('image_file', type=str, nargs='?',default="./shop4.jpg",help='image url to show product\'s rect')
    args = parser.parse_args()
    detection_result = detect_product(args.image_file)
    image = show_products(args.image_file, detection_result)
    image.show()

※ 간단한 코드 설명

parser 부분인 얼굴 검출 편에서 설명했으므로 건너가도록 하겠습니다.

경로에 익숙하신 분은 #1.처럼 별도의 이미지 디렉토리를 생성하셔서 경로를 주시면 되고 익숙하지 않으신 분은 python 코드를 작업하는 디렉토리에 이미지를 넣어주시고 #2. 번을 사용해주세요. 둘 중 하나만 사용하셔야 합니다!

* detect_product 함수

기존 코드는 얼굴 검출편과 동일하고 요청에 성공하면 응답은 JSON 객체로 검출된 상품 영역 정보를 받게 됩니다.

#print(resp.json()) 주석 처리된 부분을 해제하시고 어떻게 출력되는지 확인해보세요.

얼굴 검출편과는 다르게 상품의 정보가 나오게 됩니다.

아래와 같이 딕셔너리에서 class부분을 살펴보시면 상품이 무엇인지를 확인할 수 있습니다.

{'width': 1394, 'objects': [{'y2': 0.998958, 'x2': 0.66858, 'score': 0.994, 'y1': 0.746875, 'x1': 0.243902, 'class': 'pants'}

* show_products 함수

이미지 파일을 읽어서 상품이 있는 위치에 박스와 이름을 만들어주는 함수입니다.

draw.rectangle([(x1, y1), (x2, y2)], fill=None, outline=(255,0,0,255)) # 빨간색으로 박스를 만들고

draw.text((x1+5,y1+5), obj['class'], (255,0,0)) # 빨간색으로 상품 이름을 적어줍니다.

3. 결과 이미지

결과 이미지

4. 이미지 저장 코드

import sys
import argparse
import requests
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import glob
import os

API_URL = 'https://dapi.kakao.com/v2/vision/product/detect'
MYAPP_KEY = '위 1에서 복사한 RESTAPI키'

def detect_product(filename):
    headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)}
    try:
        files = { 'image' : open(filename, 'rb')}
        resp = requests.post(API_URL, headers=headers, files=files)
        resp.status_code
        #print(resp.json())
        return resp.json()
    except Exception as e:
        print(str(e))
        sys.exit(0)

def show_products(filename, detection_result):
    try:
        image = Image.open(filename)
    except Exception as e:
        print(str(e))
        sys.exit(0)
    draw = ImageDraw.Draw(image)
    for obj in detection_result['result']['objects']:
        x1 = int(obj['x1']*image.width)
        y1 = int(obj['y1']*image.height)
        x2 = int(obj['x2']*image.width)
        y2 = int(obj['y2']*image.height)
        draw.rectangle([(x1,y1), (x2, y2)], fill=None, outline=(255,0,0,255))
        draw.text((x1+5,y1+5), obj['class'], (255,0,0))
    del draw
    return image

if __name__ == "__main__":

    #1.files=glob.glob('./kakao_test/Image/*.jpg')+glob.glob('./kakao_test/Image/*.jpeg')+glob.glob('./kakao_test/Image/*.png')
    #2.files=glob.glob('./*.jpg')+glob.glob('./*.jpeg')+glob.glob('./*.png')
    for i in files:
        head,tail = os.path.split(i)
        detection_result = detect_product(i)
        image = show_products(i, detection_result)
        image.save(head+'/product_'+tail,'JPEG')

files객체를 생성하실 때 경로에 익숙하신 분은 #1. 번에서 별도의 이미지 디렉토리를 이용하시고 익숙하지 않으신 분은 #2. 번익숙하지 않으신 분은 python 코드를 작업하는 디렉토리에 이미지를 넣어주시고 #2. 번을 사용해주세요. 둘 중 하나만 사용하셔야 합니다!

이후 코드는 1-2. 얼굴 검출[저장편]과 동일하기 때문에 생략하겠습니다!

 

5. 결과 이미지

0123
결과 이미지

얼굴 검출편과 코드가 대부분 동일해서 설명을 간략하게 하고 넘어갔는데 혹시라도 이해가 안가시는 부분이 있으시다면 댓글에 남겨주세요.

모르시는 부분을 댓글에 남겨주시는 것은 다른 분들에게도 도움이 됩니다. 도와주세용~!

 

 

 

 

 

728x90
728x90

이번에는 여러 장의 사진을 이용하여 모자이크 후 이미지 파일을 저장하는 방법을 설명하도록 하겠습니다.

필요한 이미지 다시 한번 첨부드립니다!

cat.jpg
0.33MB
girl1.jpg
0.38MB
girl2.jpg
0.81MB
gorilla.jpg
0.51MB
lion.jpg
0.38MB

추가적으로 얼굴 이미지를 구하실 분들은 아래 링크에서 face를 입력 후 다운로드하세요!

저작권이 없는 이미지 사이트입니다. --> pixabay.com/

1. REST API

앱키

REST API키를 복사해주세요.

 

2. python 코드

import sys
import argparse
import requests
from PIL import Image, ImageFilter
import glob
import os

API_URL = 'https://dapi.kakao.com/v2/vision/face/detect'
RESTAPI_KEY = '위 1에서 복사한 RESTAPI키'

def detect_face(filename):
    headers = {'Authorization': 'KakaoAK {}'.format(RESTAPI_KEY)}

    try:
        files = { 'image' : open(filename, 'rb')}
        resp = requests.post(API_URL, headers=headers, files=files)
        resp.status_code
        return resp.json()
    except Exception as e:
        print(str(e))
        sys.exit(0)

def mosaic(filename, detection_result):
    image = Image.open(filename)

    for face in detection_result['result']['faces']:
        x = int(face['x']*image.width)
        w = int(face['w']*image.width)
        y = int(face['y']*image.height)
        h = int(face['h']*image.height)
        box = image.crop((x,y,x+w, y+h))
        box = box.resize((20,20), Image.NEAREST).resize((w,h), Image.NEAREST)
        image.paste(box, (x,y,x+w, y+h))

    return image



if __name__ == "__main__":

    #1.files=glob.glob('./kakao_test/*.jpg')+glob.glob('./kakao_test/*.jpeg')+glob.glob('./kakao_test/*.png')
    #2.files=glob.glob('./*.jpg')+glob.glob('./*.jpeg')+glob.glob('./*.png')
    
    for i in files:
        head,tail = os.path.split(i)
        detection_result = detect_face(i)
        image = mosaic(i, detection_result)
        image.save(head+'/Mosaic_'+tail,'JPEG')

※ 간단한 코드 설명! (이전 코드와 다른 점만 간단하게 설명하겠습니다.)

files 부분에서 경로에 익숙하신 분은 #1에서 별도의 이미지 디렉토리를 만들어서 이미지들을 저장하시고 경로를 맞춰주세요. 익숙하지 않으신 분은 python코드가 돌아가는 디렉토리에 이미지를 저장해주세요.

files부분에서 #1과 #2 둘중 하나만 사용하셔야 합니다!

glob라이브러리를 이용하여 "kakao_test" 디렉토리 밑에 있는 .jpg, .jpeg, .png의 이미지 파일들의 경로를 리스트로 만들어 files라는 객체를 생성합니다.

for 문을 이용하여 files 객체에 담은 이미지 파일 경로 요소들을 하나씩 꺼냅니다.

head,tail = os.path.split(i) # os 라이브러리를 이용하여 head 객체에는 이미지 파일이 들어있는 디렉토리 경로, tail객체에는 이미지 파일명을 생성합니다.

detection_result = detect_face(i) # 이전 코드와 동일하게 얼굴 정보에 대한 json파일을 return 받습니다.

image = mosaic(i, detection_result) # 이전 코드와 동일합니다. (모자이크하는 함수)

image.save(head+'/Mosaic_'+tail, 'JPEG') # image.save를 이용하여 jpeg라는 이미지 파일을 디렉토리 경로+/Mosaic_이미지 파일명으로 생성합니다.

#1. 코드를 사용한다면 "./kakao_test/Mosaic_cat.jpg"라는 이미지 파일이 생성되게 됩니다!

 

3. 결과 확인

위 예제 코드를 성공하셨다면 결과를 확인해보세요.

흥미로운 점은 사람뿐만 아니라 사자, 고릴라, 고양이 모두 얼굴에 모자이크가 되어있는 것을 확인하실 수 있습니다.

추가적으로 최상단에 있는 링크에서 여러 이미지를 다운로드 후 새로운 이미지들을 제작해보세요!

01234
결과 이미지

 

728x90
728x90

안녕하세요! 

카카오톡 api를 공부하시는 분들이 많으신 것 같아서 이번에는 재밌고 신기한 비전을 사용해 보려고 합니다.

카카오톡 비전에는 얼굴 검출, 상품 검출, 성인 이미지 판별 등이 있습니다.

1편에는 얼굴 검출을 사용해 보겠습니다.

필요한 이미지 첨부해드릴게요!

cat.jpg
0.33MB
girl1.jpg
0.38MB
girl2.jpg
0.81MB
gorilla.jpg
0.51MB
lion.jpg
0.38MB

추가적으로 얼굴 이미지를 구하실 분들은 아래 링크에서 face를 입력 후 다운로드하세요!

저작권이 없는 이미지 사이트입니다. --> pixabay.com/

1. REST API

앱 키

메시지 보내기 편에서 사용한 REST API키를 복사해주세요.

위 이미지를 모르시는 분은 메시지 보내기 편을 먼저 사용해보세요!

novice-engineers.tistory.com/9?category=908185

 

[Python] 10분 만에 카카오톡 메시지 보내기 - (1. 사용자 토큰 발급)

1. Kakao Developers 사이트 이동 www.developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합..

novice-engineers.tistory.com

2. python 코드

얼굴을 검출하여 모자이크 하는 코드입니다.

import sys
import argparse
import requests
from PIL import Image, ImageFilter

API_URL = 'https://dapi.kakao.com/v2/vision/face/detect'
RESTAPI_KEY = '1에서 복사한 REST API키'

def detect_face(filename):
    headers = {'Authorization': 'KakaoAK {}'.format(RESTAPI_KEY)}

    try:
        files = { 'image' : open(filename, 'rb')}
        resp = requests.post(API_URL, headers=headers, files=files)
        resp.resp.status_code
        #print(resp.json())
        return resp.json()
    except Exception as e:
        print(str(e))
        sys.exit(0)

def mosaic(filename, detection_result):
    image = Image.open(filename)

    for face in detection_result['result']['faces']:
        x = int(face['x']*image.width)
        w = int(face['w']*image.width)
        y = int(face['y']*image.height)
        h = int(face['h']*image.height)
        box = image.crop((x,y,x+w, y+h))
        box = box.resize((20,20), Image.NEAREST).resize((w,h), Image.NEAREST)
        image.paste(box, (x,y,x+w, y+h))

    return image



if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='얼굴 모자이크.')
    # 1.parser.add_argument('image_file', type=str, nargs='?', default="./kakao_test/girl1.jpg", help='image file to hide faces')
    # 2.parser.add_argument('image_file', type=str, nargs='?', default="./girl1.jpg", help='image file to hide faces')

    args = parser.parse_args()

    detection_result = detect_face(args.image_file)
    image = mosaic(args.image_file, detection_result)
    image.show()

※ 간단한 코드설명!

앞으로도 코드가 매우 비슷하기 때문에 얼굴 검출편에서 정확하게 이해하시는게 중요합니다!

우선 RESTAPI_KEY에 1에서 복사한 REST API 키를 복사해서 넣어주세요.

argparse란 프로그램에 필요한 인자를 사용자 명령행 인터페이스로 쉽게 작성하도록 도와주는 라이브러리입니다.

command 창에서 프로그램 내의 인자를 조절할 수 있도록 도와줍니다. 기본적으로 python에 내장되어 있습니다.

==> 사용자가 편리하게 사용할 수 있도록 도와주는 라이브러리라고 생각하시면 될 것 같아용!

parser = argparse.ArgumentParser(description='얼굴 모자이크') # 설명을 기입하는 코드라고 생각하세요.

parser.add_argument('image_file', type=str, nargs='?', default="./kakao_test/girl1.jpg", help='image file to hide faces')

위 코드에서 "./kakao_test/girl1.jpg" 해당 경로의 girl1.jpg라는 이미지를 사용한다고 생각해주세요!

★ 경로에 익숙하신 분은 #1번을 이용하여 자신만의 이미지 디렉토리 경로에 넣어주시고 익숙하지 않으신 분은 작업 디렉토리에 이미지를 다운로드하시고 #2번을 이용해주세요. 둘 중 하나만 사용하셔야 합니다!

 

* detect_face함수 설명

headers = {'Authorization': 'KakaoAK {}'.format(RESTAPI_KEY)} # 이번에는 헤더가 메시지편과 조금 다릅니다.

이유가 궁금하신 분은 아래 추가 설명을 확인해보세요. (사실 중요한 부분은 아닙니다. 급하신 분은 넘어가셔두 돼용 ㅎ)

 

<추가 설명>

1. 아래 링크나 이미지를 클릭하셔서 사이트로 이동합니다.

developers.kakao.com/docs/latest/ko/vision/dev-guide#recog-face

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

2. Ctrl+F를 누르시고 Request를 입력하세요.

3. URL부분에 있는 Authorization을 확인하시면 KakaoAk {REST_API_KEY}로 되어 있습니다.

Authorization

 

files = { 'image' : open(filename, 'rb')} # 'image':파일 라는 Key, Value인 딕셔너리 형태로 만들어 줍니다.

resp = requests.post(API_URL, headers=headers, files=files) #해당 형태로 보내줍니다.

resp.status_code # 정상적으로 보내졌는지 확인

return resp.json() # 이 부분이 중요합니다!

 

요청에 성공하면 응답은 JSON 객체로 검출된 얼굴 영역 정보를 받게 됩니다.

#print(resp.json()) 주석 처리된 부분을 해제하시고 어떻게 출력되는지 확인해보세요.

얼굴의 정보들을 확인할 수 있습니다. 흥미로운 부분은 성별, 나이 등을 추측한 %를 확인하실 수 있어요.

 

* mosaic함수: 모자이크를 처리해주는 함수입니다.

모자이크 강도를 조절하실 분은

box = box.resize((20,20), Image.NEAREST).resize((w,h), Image.NEAREST) # 이 코드에서 숫자를 변경해보세요!

 

3. 실행

# 초기 이미지

 

# 결과 이미지

다음 편에서는 여러 장의 이미지들을 한 번에 모자이크하는 코드를 확인해보겠습니다.

(사실 한번에 하려고 했는데 분량 조절에 실패했습니당ㅎ...)

 

728x90
728x90

이번에는 카카오톡 챗봇을 만들어보도록 하겠습니다.

1. 로그인

accounts.kakao.com/login/kakaobusiness?continue=center-pf.kakao.com/create

 

카카오계정 로그인

여기를 눌러 링크를 확인하세요.

accounts.kakao.com

위 이미지를 클릭 후 사이트로 이동해주세요.

로그인

2. 약관 동의

약관 동의

3. 이름 설정

이름 설정

4. 시작하기

시작하기

사진에서는 잘 안보이는데 시작하기 버튼 밑에 조금한 동그라미 박스 버튼이 있습니다. 클릭하여 이동해주세요.

5. 채널 만들기

카카오톡 채널 만들기

6. 채널 개설

채널 개설

1. 프로필 사진 (선택 사항입니다. 저는 라이언 사진 넣었어용!)

2. 채널 이름 작성

3. 검색용 아이디 작성

4. 소개글 작성

5. 카테고리는 자신의 설정대로 맞추셔도 됩니다.

6. 확인 클릭!

 

7. 프로필 설정

프로필 설정

6번에서 채널을 개설하시고 프로필 설정을 ON으로 해주셔야 이후에 필요한 오픈 빌더를 신청할 수 있다고 합니다.

 

8. URL 복사

URL 복사

1. 왼쪽 스크롤을 조금 대린 후 관리 클릭

2. 채널 URL 복사 (오픈 빌더 신청시 사용되는 URL입니다.)

 

9. 오픈 빌더 신청

https://i.kakao.com/openbuilder

 

카카오 i 오픈빌더

Make your kakao I. 손쉽게 카카오 AI기술을 활용하도록 누구에게나 제공하는 kakao I 개발 플랫폼을 만나보세요.

i.kakao.com

위 이미지를 클릭 후 개인을 클릭해주세요.

오픈 빌더 신청

8번에서 복사한 URL을 카카오톡 채널 홈 URL에 넣어주세요.

※주의사항: 신청 사유를 작성 하실 때 상세하게 적으셔야 합니다. 저는 공백 포함해서 300글자 이상 적은 것 같아요!

728x90
728x90

지금부터는 파이썬을 활용한 친구에게 카카오톡 메시지 보내기를 해보겠습니다.

 

이해를 위해 메시지 보내기 1편을 꼭 해보시고 진행해 주세요!

www.novice-engineers.tistory.com/9?category=908185

 

[Python] 10분 만에 카카오톡 메시지 보내기 - (1. 사용자 토큰 발급)

1. Kakao Developers 사이트 이동 www.developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합..

novice-engineers.tistory.com

친구에게 카카오톡을 보내기 위해서는 조금 불편한 절차가 필요합니다.

우선 kakao developers에 가입된 친구(계정)가 있어야 합니다.

저 같은 경우는 부계정을 생성하여 테스트를 진행했습니다.

집에 공기계(안 쓰시는) 핸드폰이 있으시다면 카카오톡 부계정을 생성하실 수 있습니다.

=> 궁금하신 분은 댓글에 남겨주세요! 알려드리겠습니다.

부계정이나 kakao developers에 가입된 친구(계정)가 있다고 생각하고 진행하겠습니다.

1. 애플리케이션 생성

012

위 슬라이드 쇼를 참고해 주세요.

1. 로그인 후 상단에서 내 애플리케이션으로 이동해 주세요.

2. 애플리케이션 추가하기 클릭.

3. 앱 이름, 사업자명을 입력 후 저장을 눌러주세요.

4. 생성된 애플리케이션을 클릭해 주세요.

 

2. 앱 키 저장! - ★

앱 키

REST API 키를 메모장에 복사해 주세요. 중요합니다!!!

 

3. 활성화 설정

012

위 슬라이드 쇼를 참고해 주세요.

1. 좌측 메뉴에서 카카오 로그인 클릭

2. 활성화 설정에서 OFF를 클릭하여 ON으로 설정

3. 스크롤 내린 후 Redirect URI를 클릭

4. 위 슬라이드 쇼 3번째 URl를 그대로 입력 ( https://example.com/oauth ->그대로 복사 붙여 넣기!)

[나중에 바꿔도 상관없으나 처음 테스트는 반드시 일치시켜주세요!]

 

4. 팀 관리

01

위 슬라이드 쇼를 참고해 주세요.

1. 좌측 메뉴에서 팀 관리 클릭

2. 팀원 초대 클릭

3. 부계정 또는 kakao developers에 가입된 친구(계정)의 카카오 계정(이메일) 입력

4. EDITOR 클릭

5. 초대 클릭

 

5.동의항목

01
동의항목

위 슬라이드 쇼를 참고해 주세요.

1. 카카오 로그인 -> 동의항목 클릭

2. 프로필 정보, 카카오 서비스내 친구 목록 2개를 설정 클릭 후 동의 하기

3. 스크롤 내린 후 카카오톡 메시지 전송 설정 클릭 후 동의 하기

[ 친구 목록을 받아오기 위해서 중요한 설정입니다.]

 

6. 인증 코드 받기

https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}&response_type=code&scope=talk_message,friends

이전 1편에서는 다르게 &scope=talk_message,friends를 code뒤에 붙여 주셔야 됩니다!

이 부분이 없으면 친구 목록을 받아오지 못합니다. 이 코드 때문에 2시간을 검색했습니다 ㅠㅠ...

이후에는 1편과 동일한 방식으로 진행하시고 코드를 저장해 주세요.

 

7. 사용자 토큰 받아오기

import requests

url = 'https://kauth.kakao.com/oauth/token'
rest_api_key = '자신의 API 키'
redirect_uri = 'https://example.com/oauth'
authorize_code = '받아온 authorize_code'

data = {
    'grant_type':'authorization_code',
    'client_id':rest_api_key,
    'redirect_uri':redirect_uri,
    'code': authorize_code,
    }

response = requests.post(url, data=data)
tokens = response.json()
print(tokens)

# json 저장
import json
with open(r"C:\Users\user\Desktop\PythonWorkspace\kakao_test\kakao_code.json","w") as fp:
    json.dump(tokens, fp)

코드는 1편과 동일하고 authorize_code 변수만 6번에서 받아온 코드로 바꿔주세요!

 

8. scope 정보

scope 정보

실행 후 콘솔에서 scope에 friends가 있는지 반드시 확인해 주세요!!!

여기까지 실행하셔서 토큰을 받아 오시면 성공입니다!

728x90
728x90

이전 2장에서 혹시라도 안되시는 분들을 위해 추가적으로 셋팅을 올리겠습니다.

1. 본인인증 확인

01
본인 인증 확인

1. 우측 상단에 자신의 아이디를 클릭

2. 계정 설정 클릭

3. 스크롤을 내린 후 본인인증이 되어 있는지 확인

 

2. 동의 항목

01234

1. 메인에서 내 애플리케이션 클릭

2. 자신이 만든 app 클릭

3. 좌측의 동의항목 클릭

4. 프로필 정보 동의

5. 스크롤 내린 후 카카오톡 메시지 전송 동의

 

감사합니다.

728x90
728x90

사용자 토큰을 발급받지 않으신 분은 반드시 1편을 수행해주세요!

www.novice-engineers.tistory.com/9?category=908185

 

[Python] 10분 만에 카카오 오픈 API로 메시지 보내기 - (1. 사용자 토큰 발급)

1. Kakao Developers 사이트 이동 www.developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합..

novice-engineers.tistory.com

1. 메시지 이동

012

위 슬라이드 쇼를 참고해주세요.

1. 문서 클릭

2. 스크롤을 조금 내린 후 [메시지 박스 안에 있는 REST API 클릭]

3. [Ctrl + F]를 누른 후 Request를 입력

4. URL이란 박스 안에 아래와 같은 코드를 확인하실 수 있습니다.

POST/v2/api/talk/memo/default/send HTTP/1.1
Host: kapi.kakao.com
Authorization: Bearer {ACCESS_TOKEN}

=> https://kapi.kakao.com/v2/api/talk/memo/default/send 이러한 주소가 됩니다.

 

2. Visual Studio Code에 코드 입력 & 실행

import requests
import json

#1.
with open(r"C:\Users\user\Desktop\PythonWorkspace\kakao_test\kakao_code.json","r") as fp:
    tokens = json.load(fp)

#2.
with open("kakao_code.json","r") as fp:
    tokens = json.load(fp)

url="https://kapi.kakao.com/v2/api/talk/memo/default/send"

# kapi.kakao.com/v2/api/talk/memo/default/send 

headers={
    "Authorization" : "Bearer " + tokens["access_token"]
}

data={
    "template_object": json.dumps({
        "object_type":"text",
        "text":"Hello, world!",
        "link":{
            "web_url":"www.naver.com"
        }
    })
}

response = requests.post(url, headers=headers, data=data)
response.status_code

이전 1강에서 사용한 with open에 따라 #1. 또는 #2. 중 하나만 선택하여 사용하시면 됩니다.

(오류 나시는 분들은 하단에 에러들 참고해서 코드를 수정해보세요!)

 

실행 후 자신의 카카오톡을 확인해주세요!

이렇게 메시지가 온 것을 확인하실 수 있습니다.

 

 

 

 

 

 

※ 간략한 코드 설명

headers={
"Authorization" : "Bearer " + tokens["access_token"]
}
# "Bearer"이라는 문자열과 json에서 불러온 access_token의 value를 조합하여 인증키를 만든다.

 

data={
"template_object": json.dumps({
"object_type":"text",
"text":"Hello, world!",
"link":{
"web_url":"www.naver.com"
}
})
}

# object_type은 text 고정값
# text에는 내용
# link는 필수사항이라서 그냥 네이버를 넣어줬습니다.

아래 링크를 참조하시면 이해하시는데 도움될 것 같습니다!

www.developers.kakao.com/docs/latest/ko/message/message-template#text

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

response = requests.post(url, headers=headers, data=data)
response.status_code

# 위 2줄의 코드가 메시지를 보내는 과정입니다.

 

※ 추가 (scop error)

print(response.status_code)
if response.json().get('result_code') == 0:
	print('메시지를 성공적으로 보냈습니다.')
else:
	print('메시지를 성공적으로 보내지 못했습니다. 오류메시지 : ' + str(response.json()))

 

위에서 scop error 나시는 분은 어플리케이션 생성 하실때 동의 항목에서 설정하시고 토큰 받으시면 됩니다.

공유해 주신 김대성님 정말 감사합니다! :)

 

※ 추가 (403 error)

메시지를 성공적으로 보내지 못했습니다. 오류메시지 : {'msg': 'insufficient scopes.', 'code': -402, 'api_type': 'TALK_MEMO_DEFAULT_SEND', 'required_scopes': ['talk_message'], 'allowed_scopes': ['profile_nickname']}

'3. 동의항목'을 참고로해도 동일 메시지를 받아서 하단 코드를

https://kauth.kakao.com/oauth/authorize?client_id={client_id}&redirect_uri=https://example.com/oauth&response_type=code

아래와 같이 수정하니 추가 동의하고 성공했습니다.

https://kauth.kakao.com/oauth/authorize?client_id={client_id}&redirect_uri=https://example.com/oauth&response_type=code&scope=profile_nickname,friends,talk_message

※ 추가 (401 error)

headers={
'Authorization': 'Bearer' + tokens['access_token']
}
상단의 코드를 아래와 같이 수정
headers={
'Authorization': 'Bearer' + ' ' + tokens['access_token']
}

오류 및 해결 방법을 공유해 주신 분들 정말로 감사드립니다!

728x90

+ Recent posts