9일차

송용진·2024년 2월 28일
# %% [markdown]
# colletions
#     namedtuple

# %%
from collections import namedtuple

# %%
Point = namedtuple('Point',['x','y'])

# %%
p = 
p

# %%
p.x, p.y

# %%
Employee = namedtuple('Employee',['name','age','department'])

# %%
employee = Employee("John",100,'Backend')

# %%
employee

# %%
employee._asdict() #딕셔너리로 변경도 가능

# %%
Book = namedtuple('Book',['title','author','genre'])

# %%
books = [
    Book('A','B','C'),
    Book('A','B','C'),
    Book('A','B','C')
]

# %% [markdown]
# deque

# %%
from collections import deque
d = deque(['task1','task2','task3'])

# %%
d.append('task4')

# %%
d

# %%
d.pop()

# %%
d

# %%
d.popleft()

# %%
d

# %% [markdown]
# list도 pop 가능
# a.pop()
# a.pop(0) <- 인덱스 선택

# %%
%%time
d = deque([i for i in range(1000000)])
for _ in range(10000):
    d.pop()

# %%
%%time
l = [ i for i in range(1000000)  ]
for _ in range(10000):
  l.pop()

# %% [markdown]
# multiprocessing

# %%
!ls

# %%
!lscpu

# %%
from multiprocessing import Process

def process_function():
    print("프로세스 실행 중")

process = Process(target=process_function)
process.start()
process.join()

# %%
def work(id):
    print(f"Process {id} working...")

processes = [Process(target=work, args = (i,)) 
             for i in range(2)] #args는 id에 들어갈
for p in processes:
    p.start()
for p in processes:
    p.join()

# %%
from multiprocessing import Process, Value, Array

def add_one(number, array):
    number.value += 1
    for i in range(len(array)):
        array[i] += 1

number = Value('i',0) # 밸류는 단일값
array = Array('i',range(5)) # array는 리스트와 비슷, array는 리스트 같이 여러 개의 값

processes = [Process(target=add_one,args=(number,array)) for _ in range(2)]

for p in processes:
    p.start()
for p in processes:
    p.join()
print(f"number : {number.value}")
print(f"array : {list(array)}")

# %%
from multiprocessing import Pool

def square(n):
    return n**2

with Pool(2) as p:
    results = p.map(square,range(10))
results

# %% [markdown]
# pickle(csv 사용과 비슷한 느낌)
# 압축 해제 느낌?...

# %%
import pickle

data = {'a' : [i for i in range(10)],
        'b' : list("hello"),
        'c' : {True, False}
        }

# %%
data, type(data)

# %%
with open('data.pickle','wb') as f:
    pickle.dump(data,f)#dump로 저장

# %% [markdown]
# 'wb' 모드는 
# 파일을 이진(binary) 모드로 쓰기 위해 열 때 사용됩니다. 
# 주로 이미지, 동영상, 사운드 파일 등 
# 바이너리 데이터를 처리할 때 사용됩니다. 
# 이 모드를 사용하면 
# 텍스트와는 다르게 데이터가 수정되지 않고 그대로 기록됩니다.

# %%
with open('data.pickle','rb') as f:
    data1 = pickle.load(f)#load로 읽는다

# %%
data1

# %%
class A:
    name = 'good'

# %%
a = A()

# %%
with open('a.pickle','wb') as f:
    pickle.dump(a,f)

# %%
with open('a.pickle','rb') as f:
    aa = pickle.load(f)

# %%
aa.name

# %% [markdown]
# 단점 : 호환성이 json보다 떨어짐, 버전이 맞아야함

# %% [markdown]
# 구체적인 사용법을 다 알 필요는 없다...

# %% [markdown]
# day9 파일 처리 (이미지)
# Numpy
# Pillow
# OpenCV

# %% [markdown]
# Numpy

# %%
import numpy as np

# 배열 덧셈
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("Array Addition:", arr1 + arr2)

# 배열 곱셈
print("Array Multiplication:", arr1 * arr2)

# 통계 함수 사용
arr = np.array([1, 2, 3, 4, 5])
print("Mean:", np.mean(arr))
print("Standard Deviation:", np.std(arr))

# %%
arr = np.array([1,2,3])
arr

# %%
arr + 1

# %%
arr = np.array([[1,2,3],[4,5,6]])
arr

# %%
arr + 1

# %%
arr + np.array([11,12]) #모양이 맞지 않을 때

# %%
arr + np.array([11,12,13]) #모양이 맞을 때

# %%
#행렬 간의 연산
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])

# %%
a + b

# %%
np.int8

# %%
2**8 # 0~255 , 256개

# %%
np.float32

# %% [markdown]
# numpy의 컨셉과 기본적인 사용법 익히기

# %% [markdown]
# Pillow

# %%
from PIL import Image

#열기
image = Image.open("backend.png")

# %%
image

# %%
image.save("output.png")

# %%
#이미지 회전
rotated_image = image.rotate(180)
rotated_image.save("rotated_image.png")

# %%
bw_image = image.convert("L")
bw_image.save("gray.png")

# %%
cropped_image = image.crop((100,100,400,400))
cropped_image.save("cropped.png")

# %%
from PIL import Image, ImageDraw, ImageFont

image_new = Image.open("backend.png")

# %%
draw = ImageDraw.Draw(image_new)

# %%
font = ImageFont.load_default()

# %%
draw.text((10,10),"Python Backend",fill="black",font=font)
image_new.save("text_added.png")

# %%
from PIL import ImageFilter

image = Image.open("backend.png")
blurred_image = image.filter(ImageFilter.GaussianBlur(3))
# blurred_image = image.filter(ImageFilter.SHARPEN(3))
blurred_image.save("blurred.png")

# %%
import os

input_folder = "input_images"
output_folder = "output_images"

for filename in os.listdir(input_folder): #대량의 이미지 처리 작업
    img_path = os.path.join(input_folder,filename)
    img = Image.open(img_path)
    resized_img = img.resize((128,128))
    resized_img.save(os.path.join(output_folder, filename))

# %%
#대비 증가
image = Image.open("input_images/backend.png")

# %%
from PIL import ImageEnhance

enhancer = ImageEnhance.Contrast(image)
enhanced_image = enhancer.enhance(2)
enhanced_image.save("enhanced_contrast.png")

# %%
np.array(image)

# %%
np.array(image).shape

# %% [markdown]
# 세로 가로 채널

# %%
array = np.random.randint(0,255,size=(440,680,3),dtype=np.uint8)

# %%
array.dtype

import cv2
import mediapipe as mp

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, model_complexity=1, smooth_landmarks=True, min_detection_confidence=0.5, min_tracking_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils

cap = cv2.VideoCapture('video.mp4')
img_bool = True
while cap.isOpened():
    ret, frame = cap.read()

    if not ret:
        break

    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = pose.process(frame_rgb)

    if results.pose_landmarks:
        mp_drawing.draw_landmarks(frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,
                                  mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2),
                                  mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2))


    if cv2.waitKey(1) == ord('q'):
        break

    cv2.imshow('frame', frame)

cap.release()
cv2.destroyAllWindows()

#카메라
# cap = cv2.VideoCapture(0)
# img_bool = True
# while cap.isOpened():
#     ret, frame = cap.read()
#     if not ret:
#         break
#     gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#     edges = cv2.Canny(image=gray,threshold1=100,threshold2=200)    
#     if cv2.waitKey(1) == ord('q'):        
#         break    
#     # cv2.imshow('frame',gray)
#     cv2.imshow('frame',edges)        
# cap.release()
# cv2.destroyAllWindows()

#객체 감지 video.mp4
# cap = cv2.VideoCapture("video.mp4")
# img_bool = True
# while cap.isOpened():
#     ret, frame = cap.read()
#     if not ret:
#         break
#     gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#     edges = cv2.Canny(image=gray,threshold1=100,threshold2=200)    
#     if cv2.waitKey(1) == ord('q'):        
#         break
#     elif cv2.waitKey(1) == ord('a'):
#         img_bool = ~img_bool
#     if img_bool:
#         cv2.imshow('frame',gray)
#     else:
#         cv2.imshow('frame',edges)        
# cap.release()
# cv2.destroyAllWindows()

# img = cv2.imread("img.jpg")
# gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# edges = cv2.Canny(image=gray_img, threshold1=100, threshold2=200)
# cv2.imshow("Edge Detected Image",edges)
# cv2.imshow("Original Image",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# img = cv2.imread("img.jpg")
# gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# edges = cv2.Canny(image=gray_img, threshold1=100, threshold2=200)
# cv2.imshow("Edge Detected Image",edges)
# cv2.imshow("Original Image",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# img = cv2.imread("img.jpg")
# blurred_img = cv2.GaussianBlur(img,(5,5),0)
# cv2.imshow("Blurred Image",blurred_img)
# cv2.imshow("Original Image",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

#이미지 회전
# img = cv2.imread("img.jpg")
# height, width = img.shape[:2]
# center = (width/2, height/2)
# rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=90, scale=1)
# rotated_img = cv2.warpAffine(src=img, M=rotate_matrix, dsize=(width, height))
# cv2.imshow("Rotated Image", rotated_img)
# cv2.imshow("Original Image", img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

# img = cv2.imread("img.jpg")
# gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# cv2.imshow("Grayscale Image",gray_img)
# cv2.imshow("Original Image",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# img = cv2.imread("img.jpg")

# # 이미지 표시
# cv2.imshow("Image",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# cv2.imwrite("output.jpg",img)
profile
개발자

0개의 댓글