(3-10) 오디오 시작위치 처리기준 변경

This commit is contained in:
2025-02-21 16:19:52 +09:00
parent 3935dd45b1
commit 682019bf74
9 changed files with 90 additions and 80 deletions

5
.gitignore vendored
View File

@@ -135,4 +135,7 @@ output
# xpath notebook # xpath notebook
.xbook .xbook
회차별채점자료/*/정답파일 회차별채점자료/*/정답파일
# 열려있는 xlsx파일
~*.xlsx

BIN
250221_DIC_2521A_TEST.xlsx Normal file

Binary file not shown.

BIN
250221_DIC_2521C_TEST.xlsx Normal file

Binary file not shown.

View File

@@ -361,7 +361,7 @@
"point": 2 "point": 2
}, },
"30": { "30": {
"ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]",
"point": 2 "point": 2
}, },
"31": { "31": {

View File

@@ -363,7 +363,7 @@
"point": 2 "point": 2
}, },
"30": { "30": {
"ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]",
"point": 2 "point": 2
}, },
"31": { "31": {

View File

@@ -361,7 +361,7 @@
"point": 2 "point": 2
}, },
"30": { "30": {
"ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]",
"point": 2 "point": 2
}, },
"31": { "31": {

View File

@@ -363,7 +363,7 @@
"point": 2 "point": 2
}, },
"30": { "30": {
"ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]",
"point": 2 "point": 2
}, },
"31": { "31": {

155
README.md
View File

@@ -13,7 +13,7 @@
* PSD 관련해서 좀 더 추가적인 채점이 되도록 기능 개선 * PSD 관련해서 좀 더 추가적인 채점이 되도록 기능 개선
* PSD 라이브러리 변경도 생각해볼 것 * PSD 라이브러리 변경도 생각해볼 것
### psdExport.js ## psdExport.js
nodejs 기반, scoring.json 파일에 채점기준표 만들어서 채점 nodejs 기반, scoring.json 파일에 채점기준표 만들어서 채점
@@ -22,120 +22,127 @@ nodejs 기반, scoring.json 파일에 채점기준표 만들어서 채점
2. 지정 폴더 내 gmep 파일 scoring.json 파일 내 3 참조해서 채점 2. 지정 폴더 내 gmep 파일 scoring.json 파일 내 3 참조해서 채점
3. 채점 완료 후 output.xlsx 생성 3. 채점 완료 후 output.xlsx 생성
### xpathTest.js ## xpathTest.js
xpath 테스트 용 xpath 테스트 용
### copyFiles.py ## copyFiles.py
특정 폴더 내에 DIC 답안지를 output 폴더로 시험 유형(1교시: A, 2교시: B, 3교시: C) 별로 구분해서 복사 특정 폴더 내에 DIC 답안지를 output 폴더로 시험 유형(1교시: A, 2교시: B, 3교시: C) 별로 구분해서 복사
### 오류 및 수정 필요 부분 ## 오류 및 수정 필요 부분
1. (해결) 문제3-9 자막 위치 설정 '화면 정가운데 아래' 판별 시 자막의 길이에 따라 위치 기준이 바뀜 ### 1. (3-9) 자막 위치 설정 '화면 정가운데 아래' 판별 시 자막의 길이에 따라 위치 기준이 바뀜
* 텍스트 유사도 판별을 거치게 되면 정답으로 인정되는 텍스트의 길이도 유동적이므로 위치도 유동적으로 변경되어야 함
* 수정예상방안 : 글자 수 마다 x,y 위치 값 따로 설정하는 방식
* 현재 최소좌표와 최대좌표 사이의 값이면 정답으로 채점되도록 변경
2. .jpg / .psd 채점 파일 예외사항 * 텍스트 유사도 판별을 거치게 되면 정답으로 인정되는 텍스트의 길이도 유동적이므로 위치도 유동적으로 변경되어야 함
* 멀티미디어-003256-조은우(A) : 수험번호를 잘못입력한 psd 파일까지 총 4개의 psd파일 존재 * 수정예상방안 : 글자 수 마다 x,y 위치 값 따로 설정하는 방식
* 멀티미디어-003666-최우진(A) : 1번 jpg psd 파일 누락 * [x] 현재 최소좌표와 최대좌표 사이의 값이면 정답으로 채점되도록 변경
* 멀티미디어-005647-최영훈(A) : 2번 psd 파일 오류(2번 jpg파일의 확장자만 psd로 변경)
* 멀티미디어-003361-장하린(B) :
* 멀티미디어-001273-허윤서(C) : 수험번호 없는 psd파일 (멀티미디어_01-허윤서.psd)이 포함
* 멀티미디어-005156-임예지(D) :
1. 1번 파일 누락, 2번 파일만 작성 ### 2. .jpg / .psd 채점 파일 예외사항
* 현재 차례대로 읽어 들여 채점 하는 방식
-> 1번 파일이 누락 된 수험자는 2번 파일이 1번 파일로 인식되어 채점
-> 1번 파일이 누락 되어 있으면 건너 뛰고 2번 파일을 채점하도록 수정해야 함
2. 3개 이상 파일이 있는 경우 * 멀티미디어-003256-조은우(A) : 수험번호를 잘못입력한 psd 파일까지 총 4개의 psd파일 존재
* 멀티미디어-003666-최우진(A) : 1번 jpg psd 파일 누락
* 멀티미디어-005647-최영훈(A) : 2번 psd 파일 오류(2번 jpg파일의 확장자만 psd로 변경)
* 멀티미디어-003361-장하린(B) :
* 멀티미디어-001273-허윤서(C) : 수험번호 없는 psd파일 (멀티미디어_01-허윤서.psd)이 포함
* 멀티미디어-005156-임예지(D) :
![alt text](image.png) 1. 1번 파일 누락, 2번 파일만 작성
* psd 1번, 2번 이후 3번째 psd 파일이 존재 하는 경우
* 프로그램 실행 예상 결과는 scoringResult[] 리스트의 1번 2번 인덱스에 psd가 저장되고 3번에 gmep가 저장되어야 하지만
4개이상의 psd 파일이 있는 경우 scoringResult[4] 위치까지 데이터가 저장됨
* gmep의 채점결과는 scoringResult[3]에 직접 저장하므로
* 결과 예상은 scoringResult[3]까지 저장되어야 하지만 scoringResult[4]에 더미 값이 저장됨
3. [3-15] [3-18] [3-21] 이미지 클립 트렌지션 xpath * 현재 차례대로 읽어 들여 채점 하는 방식
* 곰믹스-C형-003109-최시아 * 1번 파일이 누락 된 수험자는 2번 파일이 1번 파일로 인식되어 채점
* [3-18] 이미지2.jpg 클립 트렌지션 [문 열기(앞으로 이동, 재생 시간 : 1.00)] 채점 문항 * 1번 파일이 누락 되어 있으면 건너 뛰고 2번 파일을 채점하도록 수정해야 함
* '이미지2.jpg'가 비디오트랙에 2개 연속으로 삽입되어 있음
* 첫번째 '이미지2.jpg'의 클립 트렌지션은 채점기준에 부합하게 적용 되어있음
* 두번째 '이미지2.jpg'의 클립 트렌지션은
[3-21]문항에 적용되어야 할 '이미지1.jpg' 클립 트렌지션 [디졸브(앞으로 이동, 재생 시간 : 2.00)] 이 적용되어있음 (오적용 감점대상)
* 프로그램 구조상 동일한 이미지가 있을 경우 마지막에 적용된 이미지의 클립 트렌지션을 확인하고 채점
* 현재 결과는 감점 처리
![alt text](image-1.png) 2. 3개 이상 파일이 있는 경우
4. (해결) 곰믹스-B형-000370-김태연 ![alt text](image.png)
* (3-1) 미디어 소스 순서 : 동영상.mp4 > 이미지2.jpg > 이미지1.jpg > 이미지3.jpg
* Type="0" 속성을 필터링 하기 위해서
```xml * psd 1번, 2번 이후 3번째 psd 파일이 존재 하는 경우
<CRTrackClip Type="0" ClipIndex="2" Pos="119" Length="1" ClipLength="-1" Speed="-1" Level="0" Mute="0"/> * 프로그램 실행 예상 결과는 scoringResult[] 리스트의 1번 2번 인덱스에 psd가 저장되고 3번에 gmep가 저장되어야 하지만
``` 4개이상의 psd 파일이 있는 경우 scoringResult[4] 위치까지 데이터가 저장됨
* gmep의 채점결과는 scoringResult[3]에 직접 저장하므로
* 결과 예상은 scoringResult[3]까지 저장되어야 하지만 scoringResult[4]에 더미 값이 저장됨
* 소스코드 변경 ### 3. (해결) [3-15] [3-18] [3-21] 이미지 클립 트렌지션 xpath
```javascript * [x] 곰믹스-C형-003109-최시아
const clipIndexes = xpath.select('CRTrackClip[not(@Type="0")]/@ClipIndex', trackListNode); * [3-18] 이미지2.jpg 클립 트렌지션 [문 열기(앞으로 이동, 재생 시간 : 1.00)] 채점 문항
``` * '이미지2.jpg'가 비디오트랙에 2개 연속으로 삽입되어 있음
* 첫번째 '이미지2.jpg'의 클립 트렌지션은 채점기준에 부합하게 적용 되어있음
* 두번째 '이미지2.jpg'의 클립 트렌지션은
[3-21]문항에 적용되어야 할 '이미지1.jpg' 클립 트렌지션 [디졸브(앞으로 이동, 재생 시간 : 2.00)] 이 적용되어있음 (오적용 감점대상)
* **프로그램 구조상 동일한 이미지가 있을 경우 마지막에 적용된 이미지의 클립 트렌지션을 확인하고 채점**
* [x] **현재(250221기준) 검색된 '이미지n.jpg'를 기준으로 가장 먼저 나오는 클립의 트렌지션을 채점하도록 변경**
![alt text](image-1.png)
### 4. (해결) 곰믹스-B형-000370-김태연
* (3-1) 미디어 소스 순서 : 동영상.mp4 > 이미지2.jpg > 이미지1.jpg > 이미지3.jpg
* Type="0" 속성을 필터링 하기 위해서
```xml
<CRTrackClip Type="0" ClipIndex="2" Pos="119" Length="1" ClipLength="-1" Speed="-1" Level="0" Mute="0"/>
```
* 소스코드 변경
```javascript
const clipIndexes = xpath.select('CRTrackClip[not(@Type="0")]/@ClipIndex', trackListNode);
```
* 이미지2.jpg-이미지 클립길이 * 이미지2.jpg-이미지 클립길이
* [3-13] 이미지 클립 길이 [5.00] >> json파일 내부 xpath오타 수정 * [3-13] 이미지 클립 길이 [5.00] >> json파일 내부 xpath오타 수정
* 이미지1.jpg-클립 트랜지션 * 이미지1.jpg-클립 트랜지션
* [3-18] 문 열기(앞으로 이동, 재생 시간 : 1.00) * [3-18] 문 열기(앞으로 이동, 재생 시간 : 1.00)
```xml ```xml
<CRTrackClip Type="0" ClipIndex="2" Pos="119" Length="1" ClipLength="-1" Speed="-1" Level="0" Mute="0"/> <CRTrackClip Type="0" ClipIndex="2" Pos="119" Length="1" ClipLength="-1" Speed="-1" Level="0" Mute="0"/>
``` ```
* ClipIndex="2" 인덱스 값은 이미지를 참조하고 있지만 실제로는 더미 태그 >> Type 속성까지 확인하도록 xpath 변경 * ClipIndex="2" 인덱스 값은 이미지를 참조하고 있지만 실제로는 더미 태그 >> Type 속성까지 확인하도록 xpath 변경
* 이미지 클립 트랜지션 항목 Range 끝점과 시작점 차이로 길이 계산하도록 변경 * 이미지 클립 트랜지션 항목 Range 끝점과 시작점 차이로 길이 계산하도록 변경
5. CRTrackClip 1. CRTrackClip
* Type="0" ClipIndex="-1" : 공백 * Type="0" ClipIndex="-1" : 공백
5. todo * 곰믹스-B형-001551-이정우
* 자막 위치 검사하는 로직 원복 * 이미지2.jpg-클립 트랜지션 (완료)
* 파일 명 split 해서 최대한 채점 파일 추려내기
* 이미지 클립 트랜지션 항목 Range 끝점과 시작점 차이로 길이 계산하도록 변경
>> 곰믹스-B형-001551-이정우
* 이미지2.jpg-클립 트랜지션 (완료)
요부분도..맞는데 오답처리되어있네요! 요부분도..맞는데 오답처리되어있네요!
* 곰믹스B형-001393-우주원
* 텍스트 틀렸는데 텍스트 점수가 정답으로 들어감 (완료)
>> 곰믹스B형-001393-우주원 * C형-000250-안윤
* 텍스트 틀렸는데 텍스트 점수가 정답으로 들어감 (완료)
>> C형-000250-안윤
이친구도 동영상이 0.0에서 시작하는게 아니라서 그런지 배속이 틀렸다고 되어있긴합니다..ㅎㅎ (완료) 이친구도 동영상이 0.0에서 시작하는게 아니라서 그런지 배속이 틀렸다고 되어있긴합니다..ㅎㅎ (완료)
* 앞에 공백구간이 있을경우 CRTrackClip[1] 태그가 공백구간에 해당되서 * 앞에 공백구간이 있을경우 CRTrackClip[1] 태그가 공백구간에 해당되서
xpath구문에 공백구간 제외하도록 변경 xpath구문에 공백구간 제외하도록 변경
>> 곰믹스-C형-005205-황채미 * 곰믹스-C형-005205-황채미
이미지3의 오버레이(내려앉는:속도8) 이미지3의 오버레이(내려앉는:속도8)
=>속도5로 되어있는데 정답으로 됨 =>속도5로 되어있는데 정답으로 됨
요부분도 같이 확인부탁드릴게요수치가 잘못 체크된건지..ㅎㅎ (완료) 요부분도 같이 확인부탁드릴게요수치가 잘못 체크된건지..ㅎㅎ (완료)
* 속성값 검색하는 구문 수정완료 * 속성값 검색하는 구문 수정완료
>> 곰믹스-B형-001551-이정우 * 곰믹스-B형-001551-이정우
자막(연못의 연잎들) 시작시간(5.10) (완료) 자막(연못의 연잎들) 시작시간(5.10) (완료)
* 자막 클립 리스트 중 1번, 2번 길이를 합한 길이로 채점 * 자막 클립 리스트 중 1번, 2번 길이를 합한 길이로 채점
>> 곰믹스-B형-003340-이안나 * 곰믹스-B형-003340-이안나
'초록빛 이파리들...'자막 시작시간 오답처리 (완료) * '초록빛 이파리들...'자막 시작시간 오답처리 (완료)
* 자막 클립의 앞이 잘리게 되면 트림시간이 생성되어 CRTrackClip태그의 속성값들이 변경 됨 * 자막 클립의 앞이 잘리게 되면 트림시간이 생성되어 CRTrackClip태그의 속성값들이 변경 됨
* CRTrackClip 태그 ClipLength, Length, Pos 속성값 비교 연산 필요 * CRTrackClip 태그 ClipLength, Length, Pos 속성값 비교 연산 필요
* ClipLength - Length = Pos * ClipLength - Length = Pos
1. 클립 조각 발생 스킵 여부 (5프레임) 1. 클립 조각 발생 스킵 여부 (5프레임)
- 멀티미디어-003678-신은재(A) 2프레임 : (3-1) 배열 점수 추가 * 멀티미디어-003678-신은재(A) 2프레임 : (3-1) 배열 점수 추가
2. 배열(모션이미지클립 처리여부) 2. 배열(모션이미지클립 처리여부)
3. 오디오
3. 오디오
* 앞부분 공백이 없으면 Pos속성값과 무관하게 0부터 시작한것으로 처리
* \<CRTrackClip> 오디오클립 태그가 하나라도 있어야 함
* \<CRTrackList Name="오디오1" State="45" Count="0"/> Count속성이 1이상
* 첫번째 클립이 공백이 아닐것
```xpath
//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]
```

View File

@@ -1 +1 @@
[{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength=\"-1\")]/@ClipIndex\r\n//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength='-1')]"}] [{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength=\"-1\")]/@ClipIndex\r\n//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength='-1')]"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"오디오1\"][@Count>'1']/CRTrackClip[position()=1 and not(@ClipIndex='-1')]"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"오디오1\"][@Count>'1']/CRTrackClip[1][not(@ClipIndex='-1')]"},{"kind":1,"language":"markdown","value":""}]