Post

프로젝트를 위한 파이썬 강의 후기

해당 글에서는 프로젝트를 위한 파이썬 강의 후기에 대해 소개합니다.

프로젝트를 위한 파이썬 강의 후기

🗓️ 2024.04.03

파이썬 강의 첫날에는 파이썬의 기본적인 문법과 Selenium이라는 웹 크롤링 라이브러리에 대해서 배웠다. 기본 문법에서는 변수, 자료형, 연산자, 조건문, 반복문, 내장함수 등 파이썬의 기본적인 문법을 배웠다. 기본적인 문법이라 지루해질 타이밍에 Selenium을 통해 YES24에서 베스트셀러 책 데이터를 크롤링하는 것을 배웠다. 크롤링한 데이터를 Pandas를 통해 데이터프레임으로 만들고 CSV 파일로 저장하는 것을 배웠다.

🗓️ 2024.04.05

파이썬 강의 둘째 날에는 웹 크롤링 배운 것에 이어서 ‘SRT 기차 자동 예매’, ‘구글 뉴스데이터 크롤링’ 등을 실습해 보았다. 이번 실습에서는 Selenium에 상세한 메서드를 통해 text를 가져오고 자동으로 클릭하는 방법을 배웠다. SRT 기차 자동 예매는 Selenium을 통해 SRT 홈페이지에 접속하여 자동으로 로그인하고 특정 시간에 예매하는 것을 배웠다. 하지만 아쉽게도 결제 시스템 부분에서는 완전 자동화를 할 수 없다는 사실을 강사님께서 알려주셔서 아쉬웠다. 두 번째 실습으로 구글 뉴스데이터 크롤링은 Selenium을 통해 구글 뉴스에 접속하여 특정 키워드로 검색한 뉴스 데이터를 가져오고 Pandas를 사용해서 CSV 파일로 저장하여 키워드 데이터를 분석하는 것을 배웠다.

🗓️ 2024.04.09

마지막 날에는 강사님께서 주신 과제를 리뷰하고 FastAPI에 대해서 배웠다.

FastAPI 실습(이미지 올리고 분류하기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# main.py

from fastapi import FastAPI,UploadFile, File 
from PIL import Image
from io import BytesIO


app = FastAPI()

@app.get("/")
def index():
    return {"Hello":"World!"}
from predict import predict
@app.post("/predict/image")
async def predict_api(file: UploadFile = File(...)):
    extension = file.filename.split(".")[-1] in ("jpg", "jpeg", "png")
    if not extension:
        return "Image must be jpg or png format!"
    image = Image.open(BytesIO(await file.read()))
    prediction = predict(image)
    return prediction

if __name__ == "__main__": # python main.py
    import uvicorn
    uvicorn.run("main:app", reload=True)
1
2
3
4
5
6
7
8
9
10
#model_loader.py#

import tensorflow as tf

def load_model():
    model = tf.keras.applications.MobileNetV2(weights="imagenet")
    print("Model loaded")
    return model

model = load_model()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#predict.py

from PIL.Image import Image
import numpy as np
from tensorflow.keras.applications.imagenet_utils import decode_predictions
from model_loader import model

# 이미지를 예측해서 결과를 알려주는 함수
def predict(image: Image):
    image = np.asarray(image.resize((224, 224)))[..., :3] # RGB
    image = np.expand_dims(image, 0)
    image = image / 127.5 - 1.0 # -1~1사이의 숫자로 바뀌는데 -> Scaler(정규화)
    result = decode_predictions(model.predict(image), 3)[0] # 2: 상위 2개의 결과 반환

    result_list = []
    for res in result:
        print(res)
        result_list.append({"class": res[1], "confidence": f"{res[2]*100:0.2f} %"})

    return result_list

예측 결과

Selenium과 FastAPI를 활용하여 파이썬 백엔드에 간단히 다루어 보았다. 딥한 백엔드는 아니지만, 서버라는 개념이 낯설어서 새로운 경험이었고 어려웠다.


1
2
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

This post is licensed under CC BY 4.0 by the author.