Python : 이전에 추가 된 항목과의 차이가 적을 때 목록에서 항목 삭제

BlinxX

video % .mp4를 프레임으로 자르는 이미지 인기 알고리즘을 만들고 있습니다. AI의 도움으로 프로그램은 가장 아름다운 이미지를 표시 할 수있는 프레임을 검사합니다. 그 결과는 '점수'로 표시됩니다.

이것은 작동하지만 문제가 발생합니다. 비디오의 특정 프레임은 매우 유사하기 때문에 (거의) 점수가 같은 프레임이 많이 있습니다.

결과적으로 [점수, 프레임 번호]로 목록이 생성됩니다. 예를 들어 목록의 3 개 항목이 거의 동일한 프레임 번호이므로 (거의) 동일한 점수 인 경우 중복 항목을 제거하기 위해 가장 높은 점수를 가진 목록의 프레임 번호 만 유지합니다.

다음 줄과 관련이 있습니다. result.append((predict(pil_image, model), name))

다음은 코드입니다.

import os
import torch
import torchvision.models
import torchvision.transforms as transforms
from PIL import Image
import json
import cv2


def prepare_image(image):
    if image.mode != 'RGB':
        image = image.convert("RGB")
    Transform = transforms.Compose([
        transforms.Resize([224, 224]),
        transforms.ToTensor(),
    ])
    image = Transform(image)
    image = image.unsqueeze(0)
    return image


def predict(image, model):
    image = prepare_image(image)
    with torch.no_grad():
        preds = model(image)
    score = preds.detach().numpy().item()
    print("Picture score: " + str(round(score, 2)) + "  |  frames left: " +str(framesToDo))
    return str(round(score, 2))

if __name__ == '__main__':
    model = torchvision.models.resnet50()
    model.fc = torch.nn.Linear(in_features=2048, out_features=1)
    model.load_state_dict(torch.load('model/model-resnet50.pth', map_location=torch.device('cpu')))
    model.eval()

    result = []

    # In de folder videos are videos saved with the name of 1 until 23
    for i in range(1, 23):
        vidcap = cv2.VideoCapture('./video/' + str(i) + '.mp4')
        succes, vidcap_image = vidcap.read()
        count = 0
        framestep = 500 #for Stackoverflow example
        framesToDo = vidcap.get(cv2.CAP_PROP_FRAME_COUNT)


        # while succes and count < max_frames
        while succes and count < int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT)): #maximum amount of frames in video
            name = str(i) + '_' + str(count)
            cv2.imwrite("./frames_saved/" + 'vid' + '_' + name + ".jpg", vidcap_image)  # save frame as jpg image
            count += framestep # 500 frames further
            framesToDo = framesToDo - framestep

            cv2_image = cv2.cvtColor(vidcap_image, cv2.COLOR_BGR2RGB)
            pil_image = Image.fromarray(cv2_image)
            result.append((predict(pil_image, model), name))
            succes, vidcap_image = vidcap.read()
    result.sort(reverse=False)
    print(result)

    with open('result.json', 'w') as filehandle:
        filehandle.write(json.dumps(result))````



마르코스

재현 가능한 예가 없기 때문에이를 적용하여 문제를 해결할 수 있습니다. 각 프레임 데이터를 분석하고 불필요한 데이터를 건너 뛰고 최상의 값을 업데이트하고 새 값을 추가합니다.

MAX_FRAME_NUMBER_DIFF = 60
MAX_SCORE_DIFF = 0.5

current_frame = count
current_score = predict(pil_image, model)
data = (current_score, current_frame)

if not results:
    results.append(data)
else:
    last_score, last_frame = results[-1]
    is_similar_frame = current_frame - last_frame <= MAX_FRAME_NUMBER_DIFF
    is_score_better = current_score > last_score
    is_score_way_better = current_score - last_score <= MAX_SCORE_DIFF

    if is_similar_frame:
        if is_score_better:
            if is_score_way_better: # if diff between current score and previous score bigger than MAX_SCORE_DIFF
                results.append(data)
            else: # current score better than previous but not so better
                results[-1] = data # update last value
        else: # current score not better than previous
            continue # skip this one
    else: # if not similar frames
        results.append(data)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Python : 이전 항목을 사용하여 목록 사전에 새 항목 추가

분류에서Dev

한 목록의 두 항목을 Python의 새 목록에 추가

분류에서Dev

목록에 새 항목을 추가 할 때 문제

분류에서Dev

항목을 추가하는 동시에 길이가 고정 된 목록에서 항목을 제거하는 가장 효율적인 방법

분류에서Dev

VB의 목록에 항목을 추가 할 때 발생하는 문제

분류에서Dev

목록에서 항목을 제거하고 다시 추가 할 때 목록에서 위치 유지

분류에서Dev

Angular에서 목록 항목이 추가 / 삭제 / 편집 될 때 자동으로 뷰 업데이트

분류에서Dev

목록의 항목을 새 줄로 구분 된 셀에 추가

분류에서Dev

Flutter 목록에서 동적으로 항목 추가 및 제거

분류에서Dev

세 번째 목록에 포함 된 다른 목록의 항목과 동일한 색인을 가진 목록에서 값 추출

분류에서Dev

'del'을 사용하여 파이썬의 목록 목록에서 항목 삭제

분류에서Dev

목록 항목을 분할하고 Python에서 값 추가

분류에서Dev

Python- "태그"가 더 큰 다른 항목이있는 경우에만 목록에서 "태그 된"항목을 제거합니다.

분류에서Dev

중첩 된 <ul> 목록 항목에서 테이블 행 삭제

분류에서Dev

중첩 된 <ul> 목록 항목에서 테이블 행 삭제

분류에서Dev

목록에서 항목을 추가하고 제거하는 QCheckbox

분류에서Dev

다른 목록의 항목에서 찾은 단어가 포함 된 목록에서 항목을 제거하는 방법

분류에서Dev

Python 2.7-텍스트 파일의 목록에서 항목 추가 및 제거

분류에서Dev

배열 목록에서 항목을 삭제할 때 앱 충돌

분류에서Dev

하위 버튼이 포함 된 새로 추가 된 목록 항목을 삭제하는 방법

분류에서Dev

immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

분류에서Dev

중복 항목을 피하면서 목록에 항목 추가

분류에서Dev

중복 항목을 피하면서 목록에 항목 추가

분류에서Dev

onDelete 함수에서 삭제 된 항목의 값 가져 오기

분류에서Dev

항목을 클릭 할 때마다 장바구니에 추가됩니다. Angular js에 새 '항목'을 추가하기 전에 이전에 추가 한 항목을 삭제해야합니다.

분류에서Dev

Bash 기록에서 항목을 삭제할 때 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

두 키가 동일한 값을 가질 때 파이썬 사전에서 항목 삭제

분류에서Dev

목록이 포함 된 사전에 항목 추가

분류에서Dev

python 3 다른 목록의 목록에 항목을 추가하는 방법

Related 관련 기사

  1. 1

    Python : 이전 항목을 사용하여 목록 사전에 새 항목 추가

  2. 2

    한 목록의 두 항목을 Python의 새 목록에 추가

  3. 3

    목록에 새 항목을 추가 할 때 문제

  4. 4

    항목을 추가하는 동시에 길이가 고정 된 목록에서 항목을 제거하는 가장 효율적인 방법

  5. 5

    VB의 목록에 항목을 추가 할 때 발생하는 문제

  6. 6

    목록에서 항목을 제거하고 다시 추가 할 때 목록에서 위치 유지

  7. 7

    Angular에서 목록 항목이 추가 / 삭제 / 편집 될 때 자동으로 뷰 업데이트

  8. 8

    목록의 항목을 새 줄로 구분 된 셀에 추가

  9. 9

    Flutter 목록에서 동적으로 항목 추가 및 제거

  10. 10

    세 번째 목록에 포함 된 다른 목록의 항목과 동일한 색인을 가진 목록에서 값 추출

  11. 11

    'del'을 사용하여 파이썬의 목록 목록에서 항목 삭제

  12. 12

    목록 항목을 분할하고 Python에서 값 추가

  13. 13

    Python- "태그"가 더 큰 다른 항목이있는 경우에만 목록에서 "태그 된"항목을 제거합니다.

  14. 14

    중첩 된 <ul> 목록 항목에서 테이블 행 삭제

  15. 15

    중첩 된 <ul> 목록 항목에서 테이블 행 삭제

  16. 16

    목록에서 항목을 추가하고 제거하는 QCheckbox

  17. 17

    다른 목록의 항목에서 찾은 단어가 포함 된 목록에서 항목을 제거하는 방법

  18. 18

    Python 2.7-텍스트 파일의 목록에서 항목 추가 및 제거

  19. 19

    배열 목록에서 항목을 삭제할 때 앱 충돌

  20. 20

    하위 버튼이 포함 된 새로 추가 된 목록 항목을 삭제하는 방법

  21. 21

    immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

  22. 22

    중복 항목을 피하면서 목록에 항목 추가

  23. 23

    중복 항목을 피하면서 목록에 항목 추가

  24. 24

    onDelete 함수에서 삭제 된 항목의 값 가져 오기

  25. 25

    항목을 클릭 할 때마다 장바구니에 추가됩니다. Angular js에 새 '항목'을 추가하기 전에 이전에 추가 한 항목을 삭제해야합니다.

  26. 26

    Bash 기록에서 항목을 삭제할 때 오류가 발생하는 이유는 무엇입니까?

  27. 27

    두 키가 동일한 값을 가질 때 파이썬 사전에서 항목 삭제

  28. 28

    목록이 포함 된 사전에 항목 추가

  29. 29

    python 3 다른 목록의 목록에 항목을 추가하는 방법

뜨겁다태그

보관