forked from fixed0301/Sekai-Cam
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathframeGen.py
122 lines (103 loc) · 4.48 KB
/
frameGen.py
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import cv2
import glob
from qr import *
import time
import requests
server_url = 'http://0.tcp.jp.ngrok.io:18626/animate'
def upload_image(image_path, server_url, anime_num, num):
with open(image_path, 'rb') as file:
upload = {'image': file}
data = {'anime_num': anime_num}
# while true 잠깐 지움
try:
res = requests.post(server_url, files=upload, data=data, timeout=10)
if res.status_code == 200:
with open(f'photos/img{num}_anigan.jpg', 'wb') as result_file:
result_file.write(res.content)
print("Image processed and saved successfully.")
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}. May?be Retrying in 10 seconds...")
requests.get(server_url, verify=False)
time.sleep(10)
def makeframe(frame_path, anime_num):
# 네컷 프레임 이미지 불러오기
frame = cv2.imread(frame_path)
frame = cv2.resize(frame, dsize=(2000,3000),interpolation=cv2.INTER_AREA)
# 프레임 박스 정보
left_boxes = {
'box1': [(45, 35), (952, 642)],
'box2': [(45, 680), (952, 1287)],
'box3': [(45, 1325), (952, 642 + 645 * 2)],
'box4': [(45, 1970), (952, 642 + 645 * 3)]
}
right_boxes = {
'box5': [(1045, 35), (1952, 642)],
'box6': [(1045, 680), (1952, 1287)],
'box7': [(1045, 1325), (1952, 642 + 645 * 2)],
'box8': [(1045, 1970), (1952, 642 + 645 * 3)]
}
# 프레임 위에 이미지 넣기
# photos/anime/*.jpg
# 애니화된 이미지들까지 photos안에 넣자
for filename in glob.iglob('photos/*.jpg', recursive=True):
print(filename)
if filename.split('.')[0][-1] == '1':
image_path = 'photos/img1.jpg'
upload_image(image_path, server_url, anime_num[0], filename.split('.')[0][-1])
print('animating and done_1')
elif filename.split('.')[0][-1] == '2':
image_path = 'photos/img2.jpg'
upload_image(image_path, server_url, anime_num[1], filename.split('.')[0][-1]) # 두번째 선택한 애니로
print('animating and done_2')
for (filename, left_box, right_box) in zip(glob.iglob('photos/*.jpg', recursive=True), left_boxes.values(), right_boxes.values()):
img = cv2.imread(filename)
h = len(img)
w = len(img[0])
if w * 2 / 3 > h:
h_f = h - h % 6
w_f = int(h_f * 3 / 2)
img = img[:h_f, ((w - w_f) // 2):((w - w_f) // 2 + w_f)]
else:
w_f = w - w % 6
h_f = int(w_f * 2 / 3)
img = img[((h - h_f) // 2):((h - h_f) // 2 + h_f), :w_f]
lp1, lp2 = left_box
rp1, rp2 = right_box
roi = cv2.resize(img, dsize=(lp2[0] - lp1[0], lp2[1] - lp1[1]), interpolation=cv2.INTER_AREA)
frame[lp1[1]+3:lp2[1]+3, lp1[0]+3:lp2[0]+3] = roi
roi = cv2.resize(img, dsize=(rp2[0] - rp1[0], rp2[1] - rp1[1]), interpolation=cv2.INTER_AREA)
frame[rp1[1]+3:rp2[1]+3, rp1[0]+3:rp2[0]+3] = roi
eigen = getMD5(str(time.time()))[:10]
'''
# QR 코드 생성
eigen = getMD5(str(time.time()))[:10]
urltoQR('qrqr.png','http://sada.dothome.co.kr/photo/'+eigen+'.png')
qrimg = cv2.imread('qrqr.png')
w,h,_ = qrimg.shape
qrimg = qrimg[35:w-35,35:h-35]
# 프레임에 QR코드 넣기
k0, k1 = [762,2766], [949,2954]
sk = 18
lp1 = (k0[0]+sk,k0[1]+sk)
lp2 = (k1[0]-sk,k1[1]-sk)
rp1 = (k0[0]+sk+1000,k0[1]+sk)
rp2 = (k1[0]-sk+1000,k1[1]-sk)
roi = cv2.resize(qrimg, dsize=(lp2[0] - lp1[0], lp2[1] - lp1[1]), interpolation=cv2.INTER_AREA)
frame[lp1[1]+2:lp2[1]+2, lp1[0]+1:lp2[0]+1] = roi
roi = cv2.resize(qrimg, dsize=(rp2[0] - rp1[0], rp2[1] - rp1[1]), interpolation=cv2.INTER_AREA)
frame[rp1[1]+1:rp2[1]+1, rp1[0]:rp2[0]] = roi
'''
return frame, eigen
def generateImage(frameNum, anime_num): # frameNum = 몇번째 프레임, anime_num 은 리스트
frame = 'frames_v2/'+str(frameNum)+'.png'
result, eigen = makeframe(frame, anime_num) # 최종 이미지를 sada 서버에 올리기 (QR 연결되게)
cv2.imwrite('results/' + eigen + '.png', result)
#uploadtoServer('results/' + eigen + '.png', eigen)
return frame
generateImage(1, [1, 2])
'''i=1
for frame in glob.iglob('frames/*.jpg', recursive=True):
result,eigen = makeframe(frame)
cv2.imwrite('results/'+eigen+'.png', result)
uploadtoServer('results/'+eigen+'.png',eigen)
i += 1'''