[Python] 이미지 번호 순서대로 정렬하기

잠만보 석사생·2022년 7월 8일
0

보통 os.listdir 을 통해 이미지를 리스트로 받으면 이미지가 순서대로 정렬되어있지 않다. 또한 sorted를 써도 이미지가 앞 숫자대로는 정리되지만 100이 넘어가는 순간 꼬인다.

예시로 아래 커맨드를 입력하면 저렇게 100이 넘어가면 1, 10 다음에 100을 인식한다.


alist = ['contrast images1.jpg', 'contrast images10.jpg', 'contrast images100.jpg', 'contrast images101.jpg', 'contrast images102.jpg', 'contrast images103.jpg', 'contrast images11.jpg', 'contrast images12.jpg', 'contrast images13.jpg', 'contrast images14.jpg', 'contrast images15.jpg', 'contrast images16.jpg', 'contrast images17.jpg', 'contrast images18.jpg', 'contrast images19.jpg', 'contrast images2.jpg', 'contrast images20.jpg', 'contrast images21.jpg', 'contrast images22.jpg', 'contrast images23.jpg', 'contrast images24.jpg', 'contrast images25.jpg', 'contrast images26.jpg', 'contrast images27.jpg', 'contrast images28.jpg', 'contrast images29.jpg', 'contrast images3.jpg', 'contrast images30.jpg', 'contrast images31.jpg', 'contrast images32.jpg', 'contrast images33.jpg', 'contrast images34.jpg', 'contrast images35.jpg', 'contrast images36.jpg', 'contrast images37.jpg', 'contrast images38.jpg', 'contrast images39.jpg', 'contrast images4.jpg', 'contrast images40.jpg', 'contrast images41.jpg', 'contrast images42.jpg', 'contrast images43.jpg', 'contrast images44.jpg', 'contrast images45.jpg', 'contrast images46.jpg', 'contrast images47.jpg', 'contrast images48.jpg', 'contrast images49.jpg', 'contrast images5.jpg', 'contrast images50.jpg', 'contrast images51.jpg', 'contrast images52.jpg', 'contrast images53.jpg', 'contrast images54.jpg', 'contrast images55.jpg', 'contrast images56.jpg', 'contrast images57.jpg', 'contrast images58.jpg', 'contrast images59.jpg', 'contrast images6.jpg', 'contrast images60.jpg', 'contrast images61.jpg', 'contrast images62.jpg', 'contrast images63.jpg', 'contrast images64.jpg', 'contrast images65.jpg', 'contrast images66.jpg', 'contrast images67.jpg', 'contrast images68.jpg', 'contrast images69.jpg', 'contrast images7.jpg', 'contrast images70.jpg', 'contrast images71.jpg', 'contrast images72.jpg', 'contrast images73.jpg', 'contrast images74.jpg', 'contrast images75.jpg', 'contrast images76.jpg', 'contrast images77.jpg', 'contrast images78.jpg', 'contrast images79.jpg', 'contrast images8.jpg', 'contrast images80.jpg', 'contrast images81.jpg', 'contrast images82.jpg', 'contrast images83.jpg', 'contrast images84.jpg', 'contrast images85.jpg', 'contrast images86.jpg', 'contrast images87.jpg', 'contrast images88.jpg', 'contrast images89.jpg', 'contrast images9.jpg', 'contrast images90.jpg', 'contrast images91.jpg', 'contrast images92.jpg', 'contrast images93.jpg', 'contrast images94.jpg', 'contrast images95.jpg', 'contrast images96.jpg', 'contrast images97.jpg',
          'contrast images98.jpg', 'contrast images99.jpg']

alist = sorted(alist)
for i in alist:
    print(i)

#print(alist)
_________________________________________________________________________________________
TERMINAL

contrast images1.jpg
contrast images10.jpg
contrast images100.jpg
contrast images101.jpg
contrast images102.jpg
contrast images103.jpg
contrast images11.jpg
contrast images12.jpg
contrast images13.jpg
contrast images14.jpg
contrast images15.jpg
contrast images16.jpg
contrast images17.jpg
contrast images18.jpg
contrast images19.jpg
contrast images2.jpg
contrast images20.jpg
contrast images21.jpg
contrast images22.jpg
contrast images23.jpg
contrast images24.jpg
contrast images25.jpg
contrast images26.jpg
contrast images27.jpg
contrast images28.jpg
contrast images29.jpg
contrast images3.jpg
contrast images30.jpg
contrast images31.jpg
contrast images32.jpg
contrast images33.jpg
contrast images34.jpg
contrast images35.jpg
contrast images36.jpg
contrast images37.jpg
contrast images38.jpg
contrast images39.jpg
contrast images4.jpg
contrast images40.jpg
contrast images41.jpg
contrast images42.jpg
contrast images43.jpg
contrast images44.jpg
contrast images45.jpg
contrast images46.jpg
contrast images47.jpg
contrast images48.jpg
contrast images49.jpg
contrast images5.jpg
contrast images50.jpg
contrast images51.jpg
contrast images52.jpg
contrast images53.jpg
contrast images54.jpg
contrast images55.jpg
contrast images56.jpg
contrast images57.jpg
contrast images58.jpg
contrast images59.jpg
contrast images6.jpg
contrast images60.jpg
contrast images61.jpg
contrast images62.jpg
contrast images63.jpg
contrast images64.jpg
contrast images65.jpg
contrast images66.jpg
contrast images67.jpg
contrast images68.jpg
contrast images69.jpg
contrast images7.jpg
contrast images70.jpg
contrast images71.jpg
contrast images72.jpg
contrast images73.jpg
contrast images74.jpg
contrast images75.jpg
contrast images76.jpg
contrast images77.jpg
contrast images78.jpg
contrast images79.jpg
contrast images8.jpg
contrast images80.jpg
contrast images81.jpg
contrast images82.jpg
contrast images83.jpg
contrast images84.jpg
contrast images85.jpg
contrast images86.jpg
contrast images87.jpg
contrast images88.jpg
contrast images89.jpg
contrast images9.jpg
contrast images90.jpg
contrast images91.jpg
contrast images92.jpg
contrast images93.jpg
contrast images94.jpg
contrast images95.jpg
contrast images96.jpg
contrast images97.jpg
contrast images98.jpg
contrast images99.jpg

보통 paired image를 input으로 넣으려고 할때 이미지를 순서를 맞춰야한다.

아니면 학습이 어렵다. 예를들면 pix2pix 나 autoencoder 등 image들이 1:1 paired된 이미지를 학습해야된다.

  • Pix2Pix 논문 Figure 17: image의 테두리만 있는 input이랑 ground truth 이미지를 쌍으로 학습시켜 output 신발을 생성한다.

이처럼 학습이미지 순서를 맞춰서 모델에 input으로 feed할라면 이미지 순서를 정렬해야된다.

아래 코드는 stackoverflow에서 갖고온 코드이다. 원하는 리스트를 .sort(key=natural_keys) 하면 아름답게 정렬이 된다. 인제 학습하러 가자!

import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    '''
    alist.sort(key=natural_keys) sorts in human order
    http://nedbatchelder.com/blog/200712/human_sorting.html
    (See Toothy's implementation in the comments)
    '''
    return [ atoi(c) for c in re.split(r'(\d+)', text) ]

alist = ['contrast images1.jpg', 'contrast images10.jpg', 'contrast images100.jpg', 'contrast images101.jpg', 'contrast images102.jpg', 'contrast images103.jpg', 'contrast images11.jpg', 'contrast images12.jpg', 'contrast images13.jpg', 'contrast images14.jpg', 'contrast images15.jpg', 'contrast images16.jpg', 'contrast images17.jpg', 'contrast images18.jpg', 'contrast images19.jpg', 'contrast images2.jpg', 'contrast images20.jpg', 'contrast images21.jpg', 'contrast images22.jpg', 'contrast images23.jpg', 'contrast images24.jpg', 'contrast images25.jpg', 'contrast images26.jpg', 'contrast images27.jpg', 'contrast images28.jpg', 'contrast images29.jpg', 'contrast images3.jpg', 'contrast images30.jpg', 'contrast images31.jpg', 'contrast images32.jpg', 'contrast images33.jpg', 'contrast images34.jpg', 'contrast images35.jpg', 'contrast images36.jpg', 'contrast images37.jpg', 'contrast images38.jpg', 'contrast images39.jpg', 'contrast images4.jpg', 'contrast images40.jpg', 'contrast images41.jpg', 'contrast images42.jpg', 'contrast images43.jpg', 'contrast images44.jpg', 'contrast images45.jpg', 'contrast images46.jpg', 'contrast images47.jpg', 'contrast images48.jpg', 'contrast images49.jpg', 'contrast images5.jpg', 'contrast images50.jpg', 'contrast images51.jpg', 'contrast images52.jpg', 'contrast images53.jpg', 'contrast images54.jpg', 'contrast images55.jpg', 'contrast images56.jpg', 'contrast images57.jpg', 'contrast images58.jpg', 'contrast images59.jpg', 'contrast images6.jpg', 'contrast images60.jpg', 'contrast images61.jpg', 'contrast images62.jpg', 'contrast images63.jpg', 'contrast images64.jpg', 'contrast images65.jpg', 'contrast images66.jpg', 'contrast images67.jpg', 'contrast images68.jpg', 'contrast images69.jpg', 'contrast images7.jpg', 'contrast images70.jpg', 'contrast images71.jpg', 'contrast images72.jpg', 'contrast images73.jpg', 'contrast images74.jpg', 'contrast images75.jpg', 'contrast images76.jpg', 'contrast images77.jpg', 'contrast images78.jpg', 'contrast images79.jpg', 'contrast images8.jpg', 'contrast images80.jpg', 'contrast images81.jpg', 'contrast images82.jpg', 'contrast images83.jpg', 'contrast images84.jpg', 'contrast images85.jpg', 'contrast images86.jpg', 'contrast images87.jpg', 'contrast images88.jpg', 'contrast images89.jpg', 'contrast images9.jpg', 'contrast images90.jpg', 'contrast images91.jpg', 'contrast images92.jpg', 'contrast images93.jpg', 'contrast images94.jpg', 'contrast images95.jpg', 'contrast images96.jpg', 'contrast images97.jpg',
          'contrast images98.jpg', 'contrast images99.jpg']

alist.sort(key=natural_keys)
print(alist)
profile
생명공학을 전공했지만 AI에 관심있는 사람

0개의 댓글