ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์ด๋ฏธ์ง€๋ฅผ ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์— ์˜ฌ๋ฆด๋•Œ ํŒŒ์ผ์˜ ํ”ฝ์…€๊ฐ’์ด ์ „์ฒด ์›์†Œ์˜ ์•ฝ 9%๊ฐ€ ๋ณ€๊ฒฝ๋๋‹ค. ์ด๋กœ ์ธํ•ด ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด inference๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๐Ÿ˜ฃ ์ด๋ฏธ์ง€์˜ ์›์†Œ ํ•˜๋‚˜ํ•˜๋‚˜์— ํฐ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์€ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๋‹ค.

# ํŒŒ์ผ์ด ๊ฐ™์ง€ ์•Š์Œ
AssertionError: 
Arrays are not equal to 7 decimals

Mismatched elements: 215247 / 2362368 (9.11%)
Max absolute difference: 255
Max relative difference: 255.
 x: array([[[  0,   0,   4],
        [  5,   6,  10],
        [  8,   9,  13],...
 y: array([[[  0,   0,   4],
        [  5,   6,  10],
        [  8,   9,  13],...

gcp์— ์—…๋กœ๋“œํ•  ๋•Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด ์—…๋กœ๋“œํ•˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ผ๊นŒ? ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์šด๋ฐ›์•˜์„ ๋•Œ ๊ฐ’์ด ๋ณ€ํ˜•๋์„ ๊ฒƒ์œผ๋กœ ์ถ”์ธกํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ดค๋‹ค.

# ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ €์žฅ
image_bytes = cv2.imencode(".jpg", image)[1].tostring()
with open('test.jpg', 'wb') as f:
    f.write(image_bytes)

# ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ฝ์€ ํ›„ ๋‹ค์‹œ ๋””์ฝ”๋”ฉ
with open('test.jpg', 'rb') as f:
    new_image_bytes = f.read()
new_image = cv2.imdecode(np.frombuffer(new_image_bytes, np.uint8), cv2.IMREAD_COLOR)

# ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋น„๊ต
np.testing.assert_equal(image, new_image)

# ์—ญ์‹œ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.
AssertionError: 
Arrays are not equal

Mismatched elements: 215247 / 2362368 (9.11%)
Max absolute difference: 255
Max relative difference: 255.
 x: array([[[  0,   0,   4],
        [  5,   6,  10],
        [  8,   9,  13],...
 y: array([[[  0,   0,   4],
        [  5,   6,  10],
        [  8,   9,  13],...

์—ญ์‹œ๋‚˜ ํŒŒ์ผ์ด ์ธ์ฝ”๋”ฉ ํ›„ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์›๋ณธ ์ด๋ฏธ์ง€์™€ ์ธ์ฝ”๋”ฉ, ๋””์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ์›์ธ์„ ์ฐพ์•„๋ณด๋‹ˆ ํŒŒ์ผ ์••์ถ• ์‹œ jpg ํฌ๋งท์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์˜€๋‹ค.

jpeg๋Š” ์†์‹ค ์••์ถ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์†์‹ค์ด ๋ฐœ์ƒํ•˜๊ณ  ์ธ์ฝ”๋”ฉ, ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์†์‹ค์ด ๊ณ„์† ์Œ“์ด๊ฒŒ ๋˜์–ด ์›๋ณธ ์ด๋ฏธ์ง€์™€ ์ธ์ฝ”๋”ฉ ํ›„ ๋””์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€ ๊ฐ’์ด ์™„์ „ํžˆ ๋™์ผํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  png ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. png๋Š” ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ๋น„์†์‹ค ์••์ถ•์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์„ ์••์ธกํ•  ๋•Œ ์†์‹ค์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด png ํฌ๋งท์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ ๋’ค ๋””์ฝ”๋”ฉํ•œ ์ด๋ฏธ์ง€์™€ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

image_bytes = cv2.imencode(".png", image)[1].tostring()
with open('test.jpg', 'wb') as f:
    f.write(image_bytes)
with open('test.jpg', 'rb') as f:
    new_image_bytes = f.read()
new_image = cv2.imdecode(np.frombuffer(new_image_bytes, np.uint8), cv2.IMREAD_COLOR)

np.testing.assert_almost_equal(image, new_image)

assertionerror ์—†์ด ๋™์ผํ•œ ๊ฐ’์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋์œผ๋‹ˆ ๋‹ค์‹œ ๋Œ์•„์™€์„œ google cloud storage์— ์—…๋กœ๋“œํ•˜๋Š” ์ฝ”๋“œ์— ์ ์šฉํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

# ์—…๋กœ๋“œ ํ•˜๊ธฐ
import os
from google.cloud import storage
from google.cloud.storage import Blob

bucket_name = ''
CREDENTIAL_KEY = ''

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = CREDENTIAL_KEY

# ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ
storage_client = storage.Client.from_service_account_json(CREDENTIAL_KEY)
bucket = storage_client.get_bucket(bucket_name)

image_bytes = cv2.imencode(".png", image)[1].tostring()
blob = Blob('image_name', bucket)
blob.upload_from_string(data=image_bytes, content_type="image/png")

# ์ด๋ฏธ์ง€ ๋‹ค์šด
blob = bucket.get_blob('image_name')
encoded_img = np.frombuffer(blob.download_as_string(), dtype=np.uint8)
test_image = cv2.imdecode(encoded_img, cv2.IMREAD_COLOR)

# ๊ฒฐ๊ณผ ํ™•์ธ
np.testing.assert_equal(test_image, image)

์ฐธ๊ณ ํ•œ ์ž๋ฃŒ

Log, EtcBuilding a life as an AI engineer
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Total
Today
Yesterday