No final de novembro de 2009, participei com @glerm e @husk do workshop bioelectronix for artist no piksel festival sobre como transformar uma webcam num microscópio. Tinha chegado tarde na oficina mas tinha percebido que não era tão complicado pra fazer o hacking na câmera. Achei interessante a idéia de estudar movimentos microscópicos e transformar células e bacterias em objeto de fonte sonora, variavel para efeitos de vídeo etc

(workshop em Bergen/Norway)
Três meses depois comecei a experimentar e criar um microscópio de uma webcam velha que tinha jogada aqui. Os passos não são dificeis.
- Primeiro você tem que abri a webcam e tirar o chip com a lente.
- Depois disso é só abrir a lente e inverter sua posição, ou seja, pegar o filtro de luz visível que fica em contato com o sensor do chip e inverter com a lente, botando de cabeça pra baixo. Com isso a webcam vai buscar as imagens no infinito, sendo a parte interna a lente “ocular” e a externa “objetiva”.
- O terceiro passo é arrumar umas lâminas transparentes, uma seringa com agulha e uma luz pra colocar em cima da lâmina. A parte mais dificil é encontrar a melhor distância entre a lente, a lâmina e a luz. Isso será determinante pra você consegui enxergar seres microscópicos.

(microscópio diy adaptado com caixas de madeira e 4 coroas norueguesas)
(estrutura com lego, ficou bacana pela regulagem da profundidade)
Não tem mistério. Abra a câmera normalmente utilizando seu programa favorito (pd, vlc, mplayer…) e veja as células e bacterias se movimentando pela lâmina.
Estou começando alguns estudos para implementar algo com esses movimentos de células, bactérias. Tentei abri a webcam utilizando o pdp_ctrack no pure-data mas estava travando o patch, acho que com erro de profundidade na imagem (pdp_v4l2: unsupported color model). Procurei solução com o Gem e parece que a mistura de pix_background com pix_blob faz o reconhecimento dos movimentos e calcular o centro de gravidade da imagem. Tem também o objeto pix_movement mas não testei ainda.

(patch com objetos para capturar os movimentos, achei da lista oficial do pure-data)
#N canvas 785 167 448 492 12; #X obj 37 -97 tgl 25 0 empty empty Gem 0 -6 0 8 -258699 -1 -1 1 1; #X msg 73 -97 dialog; #X obj 37 -10 pix_rgba; #X obj 335 -103 tgl 30 0 empty empty empty 20 8 0 8 -262144 -1 -1 1 1; #X obj 266 -93 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #N canvas 0 0 450 300 gemwin 0; #X obj 118 60 inlet; #X obj 69 194 gemwin; #X msg 69 113 create; #X msg 85 146 destroy; #X msg 186 148 dimen 800 600; #X obj 118 85 sel 0 1; #X obj 152 117 t f b; #X obj 254 59 inlet; #X connect 0 0 5 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X connect 5 0 3 0; #X connect 5 1 6 0; #X connect 6 0 2 0; #X connect 6 1 4 0; #X connect 7 0 1 0; #X restore 266 -71 pd gemwin; #X text 336 -123 render; #X text 264 -113 Gemwin; #X obj 37 -68 gemhead 40; #X obj 37 -42 pix_video; #X obj 102 201 rectangle 5.334 4; #X obj 102 178 pix_texture; #X obj 102 62 pix_threshold; #X obj 251 50 pack f f f; #X floatatom 244 -12 5 0 0 0 - - -; #X floatatom 278 -10 5 0 0 0 - - -; #X floatatom 312 -9 5 0 0 0 - - -; #X obj 255 11 t b f; #X obj 297 12 t b f; #X obj 102 117 pix_threshold; #X floatatom 152 95 5 0 0 0 - - -; #X obj 102 26 pix_background; #X msg 123 -49 reset; #X msg 175 -26 \$1 \$1 \$1; #X msg 175 -61 0.5; #X floatatom 175 -42 5 0 0 0 - - -; #X obj 102 144 pix_blob 3; #X msg 212 91 0.86; #X msg 371 -12 1 1 0; #X text 259 92 filtre bleu; #X floatatom 220 148 5 0 0 0 - - -; #X obj 103 234 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #N canvas 415 240 288 328 senVal2cursor 0; #X obj 78 120 - 0.5; #X obj 187 99 - 0.5; #X obj 136 98 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 136 76 inlet; #N canvas 708 87 235 408 cursor 0; #X obj 52 213 alpha; #X floatatom 155 116 5 0 0 0 - - -; #X obj 92 75 inlet; #X obj 126 75 inlet; #X floatatom 109 122 5 0 0 0 - - -; #X obj 52 157 translateXYZ; #X floatatom 126 190 5 0 0 0 - - -; #X obj 52 188 rotateXYZ; #X obj 52 326 color; #X obj 86 245 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -258699 -1 -1 0 1; #X obj 94 245 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -24198 -1 -1 0 1; #X obj 102 245 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -355 -1 -1 0 1; #X obj 110 245 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -195568 -1 -1 0 1; #N canvas 0 22 452 302 color 0; #X obj 44 212 pack f f f f; #X msg 44 236 \$1 \$2 \$3 \$4; #X obj 26 145 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 41 144 t b f; #X obj 41 35 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -258699 -1 -1 0 1; #X obj 49 35 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -24198 -1 -1 0 1; #X obj 57 35 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -355 -1 -1 0 1; #X obj 65 35 vsl 8 50 0 1 0 0 empty empty empty 0 -8 0 8 -195568 -1 -1 0 1; #X obj 63 167 t b f; #X obj 86 189 t b f; #X floatatom 77 86 5 0 0 0 - - -; #X floatatom 67 101 5 0 0 0 - - -; #X floatatom 53 115 5 0 0 0 - - -; #X floatatom 35 129 5 0 0 0 - - -; #X obj 17 7 inlet; #X obj 52 7 inlet; #X obj 87 7 inlet; #X obj 122 8 inlet; #X obj 44 261 outlet; #X connect 0 0 1 0; #X connect 1 0 18 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 3 1 0 1; #X connect 4 0 0 0; #X connect 4 0 13 0; #X connect 5 0 3 0; #X connect 5 0 12 0; #X connect 6 0 8 0; #X connect 6 0 11 0; #X connect 7 0 9 0; #X connect 7 0 10 0; #X connect 8 0 0 0; #X connect 8 1 0 2; #X connect 9 0 0 0; #X connect 9 1 0 3; #X connect 14 0 4 0; #X connect 15 0 5 0; #X connect 16 0 6 0; #X connect 17 0 7 0; #X restore 142 311 pd color; #X floatatom 92 335 5 0 0 0 - - -; #X obj 52 95 ortho; #X obj 52 353 circle 0.07; #X obj 162 -2 inlet; #X obj 52 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X text 52 371 cercle; #X obj 144 273 r color; #X floatatom 67 122 5 0 0 0 - - -; #X obj 52 43 gemhead 45; #X connect 0 0 8 0; #X connect 1 0 5 3; #X connect 2 0 5 1; #X connect 3 0 5 2; #X connect 4 0 5 2; #X connect 5 0 7 0; #X connect 6 0 7 3; #X connect 7 0 0 0; #X connect 8 0 16 0; #X connect 9 0 13 0; #X connect 10 0 13 1; #X connect 11 0 13 2; #X connect 12 0 13 3; #X connect 13 0 8 1; #X connect 14 0 16 1; #X connect 15 0 5 0; #X connect 17 0 18 0; #X connect 18 0 22 0; #X connect 20 0 8 1; #X connect 21 0 5 1; #X connect 22 0 15 0; #X restore 77 177 pd cursor; #X obj 78 75 r Xblob; #X obj 187 73 r Yblob; #X obj 187 119 * 8; #X obj 77 142 * 8; #X connect 0 0 8 0; #X connect 1 0 7 0; #X connect 2 0 4 2; #X connect 3 0 2 0; #X connect 5 0 0 0; #X connect 6 0 1 0; #X connect 7 0 4 1; #X connect 8 0 4 0; #X restore 103 253 pd senVal2cursor; #X obj 276 179 s Xblob; #X obj 347 179 s Yblob; #X floatatom 347 161 5 0 0 0 - - -; #X floatatom 276 161 5 0 0 0 - - -; #X text 280 -39 filtre bleu; #X connect 0 0 8 0; #X connect 1 0 8 0; #X connect 2 0 21 0; #X connect 3 0 5 1; #X connect 4 0 5 0; #X connect 8 0 9 0; #X connect 9 0 2 0; #X connect 11 0 10 0; #X connect 12 0 19 0; #X connect 13 0 12 2; #X connect 14 0 13 0; #X connect 15 0 17 0; #X connect 16 0 18 0; #X connect 17 0 13 0; #X connect 17 1 13 1; #X connect 18 0 13 0; #X connect 18 1 13 2; #X connect 19 0 26 0; #X connect 20 0 19 1; #X connect 21 0 12 0; #X connect 22 0 21 0; #X connect 23 0 21 1; #X connect 24 0 25 0; #X connect 25 0 23 0; #X connect 26 0 11 0; #X connect 26 1 36 0; #X connect 26 2 35 0; #X connect 26 3 30 0; #X connect 27 0 19 1; #X connect 28 0 13 0; #X connect 31 0 32 0; #X connect 35 0 34 0; #X connect 36 0 33 0;

Paralelo aos estudos e hacking no microscópio, estou pegando pesado nas coisas mais teóricas de computação musical. Vai chegar um momento que essas linhas de pesquisa irão convergir e de repente pode sair alguma coisa integrada.
Se alguem encarar a correria, manda um retorno…






