dis-cryption; uncode code

Korean Statement
묘사는 언어를 통해 무언가를 다시 드러내는 것이다. 이러한 과정은 일반적으로 언어를 통해 이루어진다. 문자는 부호를 통해 언어를 encoding 하는 방법 중 하나이다. 하지만 언어는 decode 되는 방법에 따라 서로 다른 과정을 거친다. 낭독, 소리 내어 읽음의 경우, 언어는 체화된다. 이 경우 몸은 하나의 조음기계가 된다. 이는 스스로 악보를 읽어내고 연주하는 피아노와도 유사하다.
반면 묵독의 경우, 이와는 다른 decoding의 과정을 거친다. 하나의 Data glove를 가정해 보자. Data glove는 가상 공간 속의 대상(object)과 촉각적 상호작용을 위해 사용된다. 가상 공간에 존재하는 공을 손으로 들어올린다면 우리는 data glove를 통해 공의 무게를 전달받게 된다. 데이터 공간에 존재하는 공에는 무게에 해당하는 데이터가 명시되어 있으며, 데이터 글로브의 기계 장치는 공에 대한 무게를 기계적 방법으로 전달한다. 이러한 일련의 과정은 최면과도 유사하다. 이를테면 아래와 같이 말하는 것이다.
“당신은 손에 공을 들고 있습니다. 공은 3kg의 무게를 가진 강철 공입니다. 이제 당신의 손은 공의 무게로 인해 천천히 내려갈 것입니다.”
그렇다면 전제를 확장하여, 당신이 옷으로 된 형태의 데이터 입력 장치를 착용하고 있다고 하자. 이 장치는 인간의 모든 감각기에 대응하는 자극을 생성하는 것이 가능하다. 그리고 우리의 컴퓨터는 오직 제 3의 조작자가 종이에 써 넣는 글자를 통해서만 자극을 인식한다고 가정한다. 만약 조작자가 “시속 4km로 낙하하고 있음.” 이라는 감각을 써넣는다면 데이터 입력장치는 다양한 방법을 통해 적당한 크기의 운동에너지를 합리적인 방법으로 피실험자에게 전달할 것이다.
위의 예에서 자극은 언어 혹은 code를 통해 정의(encode)되었으며, 이 정보는 계산기를 통해 지각 가능한 형태로 변환(decode) 되었다. 나는 이 예가 가상의 것이 아니며 우리의 뇌에서 실제로 일어나는 언어 작용이라고 생각한다. 뇌는 decoding의 결과물인 의미의 최소단위들을 축적된 감각영역의 자료들과 일일이 비교한다. 이 결과를 토대로 우리는 지각 가능한 공간(cognizable space)을 만들어낸다. 이 때 우리는 “지각 가능한 공간 안에 위치하고 있음”을 가정한다. 마찬가지로, 이를 통해, 묘사(description)에 대해 재정의하는 것이 가능하다. 즉, 언어를 통해 지각 가능한 의미 공간이 우리의 뇌 어딘가에 재구성됨이다. 그렇다면 인공언어인 프로그래밍 언어는 이와 다른 방법을 통해 decode하는 것일까?
주로 추상적 영역에 한정되어 있는 프로그래밍 언어가 자연어(natural language)와 동일한 과정을 거쳐 묘사(description) 행위를 수행할 수 있을까? 프로그래밍 언어는 예측 불가능성이 없는 언어이다. 즉 오독의 가능성이 없다. 오독의 가능성이 있는 프로그래밍 언어란 존재하지 않는다. 그렇다면 해석 과정(dis-cryption)이 필요한 프로그래밍 언어를 통해 어떤 대상을 묘사(description)하는 것이 가능한가의 문제를 제기할수 있다. 설명과 묘사는 언어의 기본적 기능이지만 프로그래밍 언어에서 묘사의 기능은 심각히 고려된 바가 없다. dis-cryption은 프로그래밍 언어에서 description의 가능성을 타진하기 위한 초보적 단계의 시도이다.
Technical Statement
Image Processing with Bitmap API Class in Flash Actionscript 2.0
bitmap 영상의 실시간 처리는 많은 컴퓨터 자원을 소모한다. 때문에 지금까지의 vision technology를 이용한 다양한 기술의 경우 C++나 JAVA와 같은 언어에 의해 주로 처리되었다. 상대적으로 Flash Actionscript를 이용한 동영상이나 이미지의 실시간 처리는 비중 있게 다루어지지 않았다. 하지만 하드웨어의 급속한 발달에 따라 최근의 개인용 컴퓨터에서는 Flash를 이용한 실시간 이미지 처리가 과거에 비해 한결 수월해졌다. Macromedia는 2006년 Flash player version 9을 발표하면서 다양한 Bitmap 처리가 가능한 API를 추가하였고 이러한 흐름은 Macromedia가 Adobe로 인수된 이후에도 지속되었다.
이미 위에서 설명한 바와 같이 이미지의 실시간 처리는 이 작업에서 중요한 요소이다. 1/25초마다 업데이트되는 동영상을 계속해서 ASCII Art로 변환하는 작업은 많은 컴퓨터 자원을 소모하므로 알고리듬의 효율성에 초점을 맞추어 작업을 수행하여야 하였다.
Making Brightness Table for ASCII Art
정지영상의 ASCII art 변환 작업에 있어 주요한 요소는 Brightness table을 작성하는 것이다. 일반적인 경우 비트맵 이미지의 픽셀 하나하나가 하나의 글자에 대응한다. 따라서 통상적인 8bit depth 이미지의 경우, 각 픽셀의 밝기에 따라 256 글자를 선정하여 변환에 이용하는 것이 일반적이다. 일차적인 문제는 밝기에 따라 256글자를 선정하고 명도를 조절하는 일이었다. 개별 픽셀의 경우 명도값이 존재하지만 글자의 경우 이러한 명도라는 것을 수치로 환산하기 어렵다. 폰트에 따라 달라지는 것은 물론이며 앞뒤에 위치하고 있는 글자와의 관계도 고려해야 하기 때문이다. 이 문제의 일차적 해결방법은 글자수를 한정하는 것이었다. 모든 명도단계를 표현할 수 있으면 좋겠지만 현실적인 컴퓨터의 자원 문제로 이것이 불가능하였으므로 해당하는 글자의 범위를 영문 대소문자 26글자와 특수문자 ,.!?:’ 여기에 숫자 0부터 9까지를 포함한 72글자로 한정하였다. 개발자들의 프로그래밍 작업을 위하여 기존의 Courier New를 대체하기 위해 Microsoft에서 배포 중인 Consolas를 기본 폰트로 정하고 이를 기준으로 각 글자의 밝기 값을 결정하기 위한 선행 프로그램을 작성하였다.
각 글자의 밝기를 조절하는 방법에서 가장 쉬운 방법은 각 글자를 그리드 위에 올려놓고 그리드 위에서 차지하는 픽셀의 수를 따지는 방법이 가장 수월하였다. 하지만 일반적으로 폰트 낱자의 밀도를 인지하는 요소에는 글자의 중심 영역이 얼마나 채워져 있는가가 중요한 요소이다. 이점의 보완을 위해 개별 그리드에서 정 중앙을 최대치로 하는 가중치를 부여하였다. 즉 가운데에 있는 픽셀일수록 가중치가 높아져서 바깥에 있는 픽셀보다 더 큰 Darkness level을 얻도록 하였다. 이를 추출하는 프로그램을 따로 작성하여 얻은 글자의 밝기 테이블은 아래와 같다.
'.,:fLrjliJJz?!vtCF76)uqo1s3GaS5U9Yx(dmnceTHHyh4XVZDNwgEPO2I0Wk8bRApKQMB
다음에 이어져야 하는 작업은 위의 Brightness table을 기준으로 하여 영상의 각 장면을 문자열의 집합으로 변환하는 작업이다. 이 부분이 가장 컴퓨터의 자원을 많이 소모하는 부분이다. 통상 이 부분은 정지영상의 모든 픽셀값을 일일이 읽어들이고 여기에 해당하는 글자를 차곡차곡 쌓아가는 방식이다. 임의의 10 * 10크기의 정지이미지가 있을 경우 좌표값 (0, 0)에 있는 픽셀부터 좌표값 (9, 9)에 있는 픽셀까지 100개의 픽셀을 모두 읽어들이고 각각의 픽셀의 명도값을 추출한다. 이 명도값을 기준으로 위에서 얻은 Brightness table에서 해당하는 글자를 가져와 100개의 글자로 이루어진 문자열을 얻어내고 이를 이미지의 크기대로 (여기서는 10행 10열) 다시 잘라내어 화면에 출력한다.
Trial and Error
위에서 설명한 부분이 한장의 이미지를 처리하기 위한 과정이다. 하지만 동영상에서 위와 같은 작업을 실시간으로 처리하는 것은 대단히 어렵다. 320 * 214 크기의 이미지의 경우 68480개의 픽셀로 이루어져 있다. 그리고 이를 동일한 비율로 변환하면 마찬가지로 68480개의 글자로 이루어 진다. 화면의 크기와 함께 문제가 되는 것은 frame rate이다. 일반적인 영화의 경우 1/24초 단위로 재생되지만 이 또한 컴퓨터에 지나치게 많은 연산을 수행하도록 만든다. 따라서 핵심은 동영상의 크기를 얼마로 할 것인가와 일초에 몇장의 영상을 글자로 변환하는 가이다.
위의 문제를 해결하기 위한 가장 좋은 방법은 두 가지 수치의 조합을 다양한 방법을 통해 조합해보는 것이다. 그런데 동영상의 경우 사이즈 조절과 재생빈도의 조절을 위해서는 인코딩을 다시해야 하는 문제가 생긴다. 하지만 일일이 동영상을 다시 인코딩하는 방법은 비효율적이다. 이를 위해 동영상의 사이즈과 재생빈도를 프로그램 상에서 변수를 통해 제어하는 방법을 사용하였다.
여기서는 imageResize라는 변수와 playheadUpdateInterval 이라는 변수를 사용하였다. 변수 imageResize는 정지영상을 불러올 때 이미지의 확대, 축소배율을 결정한다. 즉 이 변수가 2.0일 경우 이미지의 크기는 반으로 줄어들고 연산해야할 픽셀의 수는 1/4로 줄어들게 된다. playheadUpdateInterval 변수는 현재 정지영상에서 다음 정지영상을 받아들이기 위해 대기하는 시간이다. 이 수치를 조절하면 동영상의 frame rate에 영향받지 않으면서 각 픽셀의 글자변환 작업을 수행하는 것이 가능하다.
Selective Brightness Table from Cue Sheet
위의 문제들이 일반적으로 동영상을 ASCII art 로 변환하기 위해 반드시 필요한 과정들이다. 하지만 이 프로그램의 경우 추가되는 부분이 발생하는데 바로 영상의 인물들이 나누는 대화에 따라 Brightness Table 자체가 바뀌어야 한다는 점이다. 최초에 이 작업의 목표 자체가 대사와 극중 인물의 이름, 그리고 대본 상에 배우에게 명시된 지문만으로 ASCII art 를 만들어내는 것이었기 때문이다.
이를 위해 동영상과 별개로 cue sheet 역할을 위한 XML 파일을 따로 작성하였다. XML 파일은 시간을 표시하고 그 시간에 배우의 대사와 지시문, 그리고 역할을 일일이 명기하였다. 프로그램이 실행되면 이 XML 파일을 기준으로 시간에 따라 Brightness Table을 변경하도록 한 것이다. 이의 예를 들면 아래와 같다.
<cue time="56.520">
<actor></actor>
<words><![CDATA[Estragon wakes, takes off his boots, gets up with one in each hand and goes and puts them down center front, then goes towards Vladimir.]]></words>
</cue>
<cue time="1:40.00">
<actor>ESTRAGON</actor>
<words><![CDATA[What's wrong with you?]]></words>
</cue>
<cue time="1:42.400">
<actor>VLADIMIR</actor>
<words><![CDATA[Nothing]]></words>
</cue>
위의 경우 동영상이 재생되고 56.520 초가 되는 시점이 되면 배우와 무관하게 Estragon이 깨어나서 신발을 벗으려 한다는 내용의 지문이 있다는 정보를 추가한다. 마찬가지로 1분 40초가 되는 시점이 되면 배역 Estragon은 What’s wrong with you? 라는 대사를 말한다. 이처럼 모든 정보를 XML 파일 형식으로 저장하고 정확한 시간이 되면 위의 대사, 배우이름, 지시문 등에 나온 글자를 앞서 말한 Brightness Table의 순서에 따라 재조합한다. 당연히 대사에 없는 글자는 Brightness Table에서 제외된다. 즉 동영상 재생 후 1분 40초가 지나면 What’s wrong with you? 라는 대사와 ESTRAGON이라는 이름에 나오는 철자만을 조합하여 'ri?tuosGaSnTyhNwgEOWRA 등의 글자로만 그림을 그리게 되는 것이다.
Problems to Solve and Outlook
이상이 discryption 에서 사용된 기술요소에 대한 상세한 설명이다. 위의 과정에서 발견할 수 있는 문제점은 일단 두 가지 정도이다. 우선 가장 중요한 성능의 문제이다. 아무리 좋은 컴퓨터를 사용한다고 해도 결국 알고리듬 자체가 엉망이면 에러 혹은 지독한 성능저하를 가져올 수 있다. Flash의 경우 내장된 다양한 시각 요소를 통해 프로그래머가 빠른 속도로 작업 결과물을 만들어내게 도와주지만 실행 속도에서는 아직도 많은 문제를 보여준다. 또한 동일한 시각적 결과물을 표현하기 위해 시도되어야할 다양한 프로그램 요소가 시간부족으로 무시되었다. 예를 들어 글자를 표현하는 방법에 있어서도 실제 String data 를 불러오는 것보다 벡터형식으로 선언된 MovieClip Symbol을 사용하는 것이 더 좋은 퍼포먼스를 보장할 수도 있을 것이다. 동영상 또한 애초에 Grayscale 형태로 인코딩하여 별도의 연산 없이 명도값을 얻어내는 방법 또한 시도해볼만한 부분이다. 결론적으로 더욱 세밀하고 미려한 결과를 얻기 위해 당연시되어야할 여러 시도가 시간 부족으로 무시된 점이 안타깝다.
또한 동일한 알고리듬을 더욱 성능이 좋은 여타의 언어로 Porting하는 것 또한 의미 있는 시도일 것이다. 프로세싱의 경우 JAVA의 라이브러리 형태로 동작하므로 사용이 용이하고 매우 빠른 실행속도를 보여줄 가능성이 충분하다. 또한 이미 사용된 Actionscript 2.0 의 다음 버전인 Actionscript 3.0 으로 변환하는 것 또한 향후의 지속적은 개발 업무를 위해 큰 도움이 될 것이다.
다음의 문제는 모듈화를 통한 재사용의 문제이다. 이미 작성된 코드는 객체지향으로 설계하지 않았으므로 재사용이 쉽지 않다. 하지만 기본적인 구성이 동일하므로 동영상 이외에 실시간으로 입력되는 웹캠 영상으로도 동일한 영상을 만들어낼 수 있다. 이미 웹캠을 이용해 비슷한 시각효과를 시도한 예는 있었으나 이는 단순히 프로세싱이라는 언어 개발 초기에 시도된 여러 가능성 가운데 하나였을 뿐 완성된 형태의 결과물은 아니었다. 따라서 지금의 ASCII art 제작 모듈과 기존의 다양한 web-based API를 활용하여 Web-cam 과의 접목을 시도한다면 분명 흥미진진한 결과가 나올 것이라 생각한다.
English Statement (should be revised)
Can you read code? If you are neither professional programer nor serious computer scientist, most of you might say “No.” So let me change the question. Can you read character? If you are reading this statement, you might say “Yes.” If so, what is the difference which lies between character and code?
After the first moment when the humankind start silent-reading, as I think, the process of reading became something different. If the declamation is a process of embodiment, the process of silent reading is a process of dis-cryption. Well, what is dis-cryption?
Dis-cryption may be pronounced as same as the word, “description.” As all of you might know, the process of description is defined as an account which explains what they are or what they look like. I think description has an aspect of solving hidden code. For example, when we read the play written by Beckett, the English-born writer, the scene that we re-construct with our intellectual ability in our head has to be described to perceptive field by ourself. In this process, the encryption is essential. Each letter, basically the sign, consist the whole code which can be regarded as the crypted continuum. Alike the chain of DNA, the object with the semantic domain has the characteristic of the ciphered composition.
In the contemporary media art, the previously-hidden aspect of artwork as an encrypted one encounters the chance to be emerged. For the reconsideration of this factor, I want to recall the most primitive form of encrytion and decryption, or just dis-cryption, the play.
exhibition history
“How to see the beauty that is not there” at space mass, 2007.4.17 ~ 2007.4.21









No comments
Jump to comment form | comments rss | trackback uri