파이썬 프로젝트 및 응용/chatGPT3.5로 자동으로 책 요약 후 아바타 숏츠만들기

[프로젝트]chatGPT3.5로 자동으로 책 요약 후 아바타 숏츠만들기 - 2.요약한 내용에 해당하는 이미지 만들기

파기차차 2023. 4. 21. 07:55
728x90
반응형
SMALL

ㅁ 개요

 

O 프로그램 소개

 

 

 

이번글은 이전글([프로젝트]chatGPT3.5로 자동으로 책 요약 후 아바타 숏츠만들기 - 1.책 요약하기 > 책 요약하기)에 이은 4번재 글로 chatGPT3.5로 요약한 내용에 해당하는 삽화를 OpenAI의 DALL.E로 이미지를 생성하는 방법에 대하여 살펴봅니다.

 

 

 

**본 포스팅 글은 아래 유튜브 사이트(국내 파이썬 최고 실력자 중 한 분)의 내용을 참고하여 작성하였으며, 초보자들이 좀 더 쉽고, 잘 따라할 수 있도록 해당 내용을 세부적으로 잘게 쪼개서 설명한 글입니다. 자세한 내용은 아래 사이트를 참고하여 주시기 바랍니다.

[GPT-4] 책 요약해서 유튜브 쇼츠 영상으로 돈버는 인공지능 만들기|빵형의 개발도상국

https://www.youtube.com/watch?v=_TVyF_4JJgk&t=814shttps://www.youtube.com/watch?v=sLgYJIpqUJg

 

 

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 본 포스팅의 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

1.프로그램 실행 시 아래와 같이 에러 없이 잘 실행되었습니다.(이미지 2장 생성 시간은 총 4.52초가 걸렸습니다.)

 

 

 

2. 실제 폴더에 가서 확인 결과 'temp2' 폴더가 생성되었고, 더블 클릭하여 들어가 보면

 

 

 

3. 이미지 2장이 '001.png', '002.png' 의 이름으로 잘 생성된 것을 확인할 수 있습니다.

 

 

4. openai.com에 가서 사용량을 확인 결과 1장당 0.02 달러, 즉 2장을 생성하였으므로 0.04달러가 청구될 예정입니다.

 

 

 

 


 

 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 3.py

 

 

from tqdm import tqdm
import openai
import urllib
import os
from config import *
openai.api_key = OPENAI_API_KEY

summary_list = [{'role': 'system', 'content': 'You are a helpful assistant for summarizing books.'}, {'role': 'user', 'content': 'The Indian village was once portrayed as a "closed" and "isolated" system by British administrator Charles Metcalf. However, recent studies suggest that Indian villages were never self-sufficient and had connections with wider society, including migration, trade, and religious pilgrimages. For government purposes, a village is defined as a revenue village with surveyed boundaries, and rural social life is determined by factors such as geographic and cultural environments, as well as social stratification and mobility. India has an ancient civilization that dates back to the Indus valley civilization and has a complex rural social structure influenced by various factors.'}, {'role': 'user', 'content': 'The article discusses the economic, social, and religious aspects of Indian villages. The villages were not economically self-sufficient even in British times and have been affected by industrialization and urbanization. Villagers have horizontal ties of caste and kinship that extend beyond the village to other villages and even towns. Intra-caste relations and caste matters are regulated by a caste panchayat whose members belong to different villages. The spread of Sanskritic theological ideas increased during British rule and after, due to the development of communications and spread of literacy. Western technology has helped the spread of Sanskritization. The article also discusses the political system of Indian villages.'}]

def generateImage():

    os.makedirs('temp2', exist_ok=True)

    for i, summary in tqdm(enumerate(summary_list)):
        if summary['role'] != 'user':
            continue

        res_img = openai.Image.create(
            prompt=f'book illustration, {summary["content"][-390:]}',
            n=1,
            size='512x512'
        )

        img_url = res_img['data'][0]['url']
        img_path = f'temp2/{str(i).zfill(3)}.png'

        urllib.request.urlretrieve(img_url, img_path) # img_url url의 이미지를 img_path 경로에 저장하라
    
generateImage()

 

 

 

 - 소스파일을 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
 

 

 > python 3.py

 

 


 

O 주요 내용

 

1.아래 소스코드의 주요 부분에 대해 간략히 설명 드리겠습니다.

 

 

토큰 수 제약을 회피하기 위해서 summarize_every = 1(line 20)로 설정합니다.(사실 summarize_every = 4로 설정해도 총 5페이지니까 700 X 5 = 3500 토큰이므로 제약에 걸리지 않으나, 테스트로 1로 설정하였습니다.)

 

summary_list에 chatGPT의 역할과 내용을 알려줍니다. (line 21~24)

 

 

 

 

이전글에서 얻은 summary_list 리스트를 활용하여 이미지를 생성할 것이므로 summary_list가 있어야 합니다.

 

만일 summary_list가 없는 경우 아래와 같이 이전 소스를 수정 후 다시 실행 하시기 바랍니다.

 

 

 

 

2. 소스 실행 시 아래와 같이 summary_list를 잘 얻어 올 수 있습니다.

 

 

 

3. 이미지 생성을 위해 openai의 API 키가 필요합니다.

아래와 같이 config.py를 만들고 본인의 api 키를 넣어 둡니다.

 

 

4. '3.generateImage2.py' 소스파일을 열어서 아래와 같이 코딩합니다.

 

 

5. '3.generateImage2.py' 소스파일의 나머지 부분을 아래와 같이 코딩합니다.

(자세한 내용은 아래 설명(빨간색)을 참고해 주세요)

 

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 

 

 - 오늘은 chatGPT3.5로 요약한 내용에 해당하는 삽화를 OpenAI의 DALL.E로 이미지를 생성하는 방법에 대하여 살펴보았습니다.

 

 - 오늘 우리가 배운 내용을 간략히 정리해 보면 아래와 같습니다.
 > 1.이전 글에서 생성한 summary_list(role이 'user'인 content에 책의 요약 내용이 있음)의 role이 'user'인 부분에서 content에 해당하는 요약 내용을 달리에게 이미지로 요청/응답
>2.응답 받은 내용 중 이미지 url과 저장할 로컬 디스크 path를 설정 후 해당 이미지를 디스크에 저장
for i, summary in tqdm(enumerate(summary_list)):
    if summary['role'] != 'user':
        continue

    res_img = openai.Image.create( #<-- 위의 1번에 해당
        prompt=f'book illustration, {summary["content"][-390:]}',
        n=1,
        size='512x512'
    )

    img_url = res_img['data'][0]['url'] #<-- 위의 2번에 해당
    img_path = f'temp2/{str(i).zfill(3)}.png'

    urllib.request.urlretrieve(img_url, img_path) # img_url url의 이미지를 img_path 경로에 저장하라

 

 

 

오늘은 여기까지이며,  댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.

 

 

 

 

감사합니다.

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

 

728x90
반응형
LIST