필기 숫자 인식


22

당신의 작업은 필기 숫자가 포함 된 이미지를 읽고, 숫자를 인식하고 인쇄하는 것입니다.

입력 : 28 * 28 회색조 이미지로, 공백으로 구분 된 0에서 255까지의 784 개의 일반 텍스트 숫자 시퀀스로 제공됩니다. 0은 흰색을 의미하고 255는 검은 색을 의미합니다.

출력 : 인식 된 숫자.

채점 : MNIST 데이터베이스 교육 세트 (ASCII 형식으로 변환)의 1000 개 이미지로 프로그램을 테스트합니다 . 이미 이미지를 무작위로 선택했지만 목록을 게시하지는 않습니다. 시험은 1 시간 이내에 완료되어야하며 n정답 수를 결정 합니다.
n프로그램 자격을 갖추려면 최소 200 이상이어야합니다. 소스 코드의 크기가 인 경우 s점수는로 계산됩니다 s * (1200 - n) / 1000. 최저 점수가 이깁니다.

규칙 :

  • 프로그램은 표준 입력에서 이미지를 읽고 숫자를 표준 출력에 기록해야합니다
  • 내장 OCR 기능 없음
  • 타사 라이브러리 없음
  • 외부 리소스 없음 (파일, 프로그램, 웹 사이트)
  • 무료로 제공되는 소프트웨어를 사용하여 Linux에서 프로그램을 실행할 수 있어야합니다 (필요한 경우 와인 허용)
  • 소스 코드는 ASCII 문자 만 사용해야합니다
  • 답변을 수정할 때마다 예상 점수와 고유 버전 번호를 게시하십시오

입력 예 :

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253 253 207 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253 201 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

그건 그렇고,이 줄을 입력 앞에 추가하면 :

P2 28 28 255

pgm 형식의 유효한 이미지 파일을 반전 / 음색으로 얻을 수 있습니다.

이것이 올바른 색상으로 보이는 모습입니다. 손가락

출력 예 :

5

순위 :

No.| Name         | Language   | Alg | Ver | n   | s   |  Score
----------------------------------------------------------------
 1 | Peter Taylor | GolfScript | 6D  | v2  | 567 | 101 |  63.933
 2 | Peter Taylor | GolfScript | 3x3 | v1  | 414 | 207 | 162.702

관련성이 있지만 동일하지는 않습니다 (도전은 아니지만 라텍스 코드를 찾는 데 매우 유용함) : detexify.kirelabs.org/classify.html . 또한 숫자를 인식합니다.
저스틴

1
검은 색 픽셀 만 고려하면된다고 안전하게 추측 할 수 있습니까? > 127 픽셀? 우리는 무엇을 가정 할 수 있습니까?
저스틴

2
특히 이것이 코드 골프 질문 인 경우 흑백 입력으로 제한하십시오. 사람들은 코드에서 문자를 세지 않고도이 문제를 해결함으로써 전체 경력을 쌓을 수 있습니다. 선택한 캐릭터를 게시하지 않는 것은 속임수를 멈추고 일종의 도박을 만드는 방법입니다 ... 그리고 사람들이 AI를 작성하는 것이 합리적이지 않다는 것을 감안할 때, 재미는 이상한 휴리스틱을 수행하고 얼마나 잘 보는가 토너먼트 대 경쟁에서 그렇습니다.
Dr. Rebmu

3
@aditsu 예, 누구나 제대로 할 수 없습니다. 그러나 당신은 그것을 잘못한 것을 요구하지 않고, 캐릭터 수를 측정하는 경쟁에서 누군가가 "승리"하기를 원합니다. 취미 문제 해결사에게는 문제를 조금만 파싱하는 것이 더 현실적이라고 생각합니다. 입력을 제한하는 것은 합리적으로 만드는 좋은 출발으로 보입니다. 입력이 흑백이라는 프리 패스를 제안합니다.
Dr. Rebmu

2
@ Dr.Rebmu 및 흑백 입력을 원하는 다른 사람 : 128과 같은 임계 값을 사용하여 입력을 자유롭게 변환하십시오. 필자는 확인했으며 숫자는 여전히 뇌에 의해 인식됩니다. 다른 임계 값도 시도하면 더 나은 결과를 얻을 수 있습니다.
aditsu

답변:


6

GolfScript 6D (v2 : 예상 점수 101 * 0.63 ~ = 64)

이것은 이전 GolfScript 답변과는 매우 다른 접근 방식이므로 다른 답변을 편집 하여이 v2를 만드는 것보다 v1에 별도의 답변으로 게시하는 것이 더 합리적입니다.

~]:B;569'!EM,R.==|%NL2+^=1'{{32-}%95{base}:^~\^}:&~2/{~B=<}%2^10'#]8Y,;KiZfnnRsDzPsvQ!%4C&..z,g,$m'&=

언 골프

~]:B;
[30 183 21 378 31 381 7 461 113 543 15 568]
2/{~B=<}%2base
7060456576664262556515119565486100005262700292623582181233639882 10base
=

설명

문제는 784 차원 공간에서 점을 분류하는 것입니다. 하나의 표준 접근법은 차원 축소입니다. 분류를 수행하기에 충분한 구별 력을 제공하는 작은 차원의 하위 집합을 식별합니다. 각 차원과 가능한 임계 값을 평가하여 유망한 것으로 보이는 18 쌍 (치수, 임계 값 범위)을 식별했습니다. 그런 다음 각 임계 값 범위의 중심을 선택하고 18 쌍의 6 요소 하위 집합을 평가했습니다. 마지막으로 최고의 6D 투영의 각 차원에 대한 임계 값을 최적화하여 정확도를 56.3 %에서 56.6 %로 향상 시켰습니다.

투영은 6 차원에 있고 각 차원마다 간단한 임계 값을 적용하므로 최종 조회 테이블에는 64 개의 요소 만 필요합니다. 특히 압축 할 수있는 것 같지 않기 때문에 주요 골프는 룩업 테이블 (치수 및 임계 값 목록, 반 공간 벡터를 숫자 맵으로)을 기본 변환하고 기본 변환 코드를 공유하는 것입니다.


7
"784- 차원 공간"에서 나를 잃었다 ;-)
Digital Trauma

어딘가에 실수가 있다고 두려워서, 37 개의 정답 만 받고 있습니다. 또한, 당신은 약간 모호한 것을 만들고 있습니다.
aditsu

@aditsu, 간단한 논리 오류. 이제 수정되었습니다.
피터 테일러

기본적으로 6 개의 "관련된"픽셀을 샘플링하는데 각각 임계 값이 다른 6 비트를 얻는가?
aditsu

@aditsu입니다.
피터 테일러

5

GolfScript 3x3 (v1 : 예상 점수 207 * 0.8 ~ = 166)

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'"yN(YZ5B 7k{&w,M`f>wMb>}F2A#.{E6T9kNP_s 3Q?V`;Z\'C-z*kA5M@?l=^3ASH/@*@HeI@A<^)YN_bDI^hgD>jI"OUWiGct%7/U($*;h*<"r@xdTz6x~,/M:gT|\\:#cII8[lBr<%0r&y4'{32-}%95^?^2/{))*~}%=

또는 개요에서

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'MAGIC STRING'{32-}%95^?^2/{))*~}%=

설명

높은 수준에서의 나의 접근 방식은 다음과 같습니다.

  1. 픽셀 임계 값 : 픽셀이 위에 있으면 t1다음으로 설정하십시오 1. 그렇지 않은 경우에 0.
  2. 픽셀을 그룹화하십시오. 처음에는 28x28 격자를 4x4 격자로 나누었습니다 (각 하위 격자는 7x7 픽셀 임). 그러나 3x3 그리드 (10x10, 10x8 또는 8x8 픽셀 인 서브 그리드)로 분할하면 조회 테이블 크기가 크게 줄어들면서 정확도는 약 56 %에서 약 40 %로 떨어집니다.
  3. 각 그룹의 픽셀을 합하고 다시 임계 값을 설정합니다. 설정된 픽셀 수가 위에 있으면 t2그룹의 점수를 1; 그렇지 않으면 0.
  4. 그룹 점수로 구성된 벡터로 테이블 조회를 수행하십시오. (표는 런 렝스 부호화 표준 기반 변환 속임수를 사용하여 압축된다. 대부분의 선택 t1t250 %와 같은 테이블의 63 % 사이에두고을 증가 인접한 값과 결합 될 수있는 값들을 "상관 없음 (do not care)" 실행 길이; 내 v1 테이블의 평균 실행 길이는 3.6)입니다.

t1=t2=0최적의 설정 은 아니지만 최상의 설정 t1t2정확도 측면에서 그리 멀지 않은 것으로 나타났습니다 . 테이블 압축성 측면에서 꽤 좋습니다. 두 임계 값 작업을 []*0-!!(2D 배열을 1D로 평평하게; 0s를 제거 하고 비어 있는지 확인)으로 결합 할 수 있습니다.

룩업 테이블은 주어진 그룹 점수 벡터에 대한 가장 가능성있는 후보를 제공합니다. 테이블의 개선 된 압축성이 감소 된 정확도를 초과하도록 변경 될 수있는 테이블 엔트리를 식별함으로써 스코어를 향상시키는 것이 또한 가능할 수있다.


놀랍게도 비슷한 아이디어가 있었지만 압축이 잘 될 것이라고는 상상하지 못했습니다. 이제 정확성에 중점을 두어야한다고 생각합니다 .p : 나는 그것을 바꿀 계획이 없습니다.
aditsu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.