Resumo

Neste artigo, exploraremos como o Microsoft Kinect pode ser modificado para funcionar como uma câmera infravermelha (IR). O Kinect é tipicamente conhecido como uma câmera de profundidade, mas com algumas modificações, pode capturar imagens de infravermelho. Ao bloquear o projetor de RI e adicionar lâmpadas de infravermelho externas, podemos permitir que o Kinect detecte e registre luz infravermelha. Aqui estão os principais pontos discutidos neste artigo:

  1. O Kinect é periférico para o console Xbox 360 que permite que os usuários interajam sem usar um controlador.
  2. O Kinect é uma câmera de profundidade, o que significa que pode calcular distâncias entre si e objetos em seu campo de visão.
  3. Ao modificar o Kinect, podemos usá -lo como uma câmera IR para capturar imagens de infravermelho.
  4. Os componentes do Kinect incluem um projetor de infravermelho, uma câmera IR e uma câmera RGB.
  5. O projetor de RI emite uma grade de pontos de infravermelho em objetos, que a câmera IR detecta para calcular imagens de profundidade.
  6. Uma descrição detalhada do Kinect e seus usos em potencial pode ser encontrada no livro “Making Things See”, de Greg Borenstein.
  7. Para conectar o Kinect a um computador, precisamos instalar software e bibliotecas específicos, como openni, nite, sensor e sensorkinect.
  8. Após a instalação, podemos verificar o sucesso executando scripts de amostra no processamento.
  9. Para bloquear o projetor de infravermelho, podemos criar uma venda usando fita adesiva e almofadas de velcro.
  10. Como o bloqueio do projetor de RI afeta a visibilidade do IR, as lâmpadas de IR externas precisam ser adicionadas para fornecer iluminação de IR suficiente.
  11. Para construir lâmpadas de infravermelho, podemos seguir um diagrama de circuito e calcular valores de resistência para os LEDs.

Perguntas e respostas

Q1: Qual é o Kinect conhecido principalmente por?

A1: O Kinect é conhecido principalmente como uma câmera de profundidade, capaz de calcular distâncias entre objetos e ele mesmo.

Q2: Como o Kinect pode ser modificado para funcionar como uma câmera infravermelha?

A2: O Kinect pode ser modificado bloqueando o projetor de RI e adicionando lâmpadas de infravermelho externas para capturar imagens infravermelhas.

Q3: Quais são os componentes do Kinect?

A3: Os componentes do Kinect incluem um projetor de infravermelho, uma câmera IR e uma câmera RGB.

Q4: Como as imagens de profundidade de computação do Kinect?

A4: O Kinect calcula imagens de profundidade emitindo uma grade de pontos de infravermelho em objetos, que a câmera IR detecta e usa para calcular distâncias.

Q5: Existem recursos recomendados para aprender mais sobre o Kinect?

A5: Sim, “Making Things See”, de Greg Borenstein, fornece uma descrição detalhada do Kinect e de seus aplicativos em potencial.

Q6: Que software e bibliotecas são necessários para conectar o Kinect a um computador?

A6: O software e as bibliotecas necessários incluem OpenNi, Nite, Sensor e Sensorkinect.

Q7: Como podemos verificar a instalação bem -sucedida do software Kinect?

A7: Ao executar scripts de amostra no processamento, como profundidade e profundidade, podemos verificar se a instalação foi bem -sucedida.

Q8: Como o projetor de IR do Kinect pode ser bloqueado?

A8: Uma venda pode ser criada usando fita adesiva e almofadas de velcro para cobrir e bloquear o projetor de infravermelho.

Q9: Por que é necessário adicionar lâmpadas de IR externas?

A9: Bloquear o projetor de RI reduz a visibilidade do IR, portanto, são necessárias lâmpadas de IR externas para fornecer iluminação IR suficiente para capturar imagens de infravermelho.

Q10: Como podemos construir lâmpadas de infravermelho para melhorar a visibilidade do IR?

A10: Após um diagrama de circuito e calculando os valores de resistência para os LEDs, podemos construir lâmpadas de infravermelho para melhorar a visibilidade do IR.

Conclusão

Neste artigo, explorei como o Microsoft Kinect pode ser modificado para funcionar como uma câmera infravermelha. Com as modificações e adições corretas, o Kinect pode capturar imagens infravermelhas e fornecer novas possibilidades para vários projetos. Este projeto nos permite aproveitar o potencial do Kinect além de seus usos tradicionais, demonstrando sua versatilidade e expansão.

Usando um Kinect como uma câmera infravermelha

Borenstein, Greg, Fazendo as coisas verem, O’Reilly Media, Inc., 978-1-449-30707-3, janeiro de 2012.

Kinect usa infravermelho

О эээ сйранibus

Ы з ззарегиgléria. С помощью этой страницы мы сможем определить, что запросы отправляете именно вы, а не робот. Почpels эээ моогitu произойth?

Эта страница отображается в тех случаях, когда автоматическими системами Google регистрируются исходящие из вашей сети запросы, которые нарушают Условия использования. Ponto. Ээth момо номттаая и оозз илэз и ээ и эз и эз и з и ззз и зз и ээз и ээз иth ээ эth ээзз эth эзз иthлз ио и зз и иth эз иээ эээо иth эз эээ ээо ээоо иth иэзз эth эзт эth эз ио эээ иth эз иэз иthлзз иоз ил иээ иээо иэээ иээо иth ио иээ эth иэ иээ эth иэ иээ эth ио иэ ээог seguir.

Ит и и и и и и и и и чззжfia м ирржжжfia м иржжжжfia м мжжжжжж<ь м м иржжжfia. não. Если вы используете общий доступ в Интернет, проблема может быть с компьютером с таким же IP-адресом, как у вас. Орратитеitivamente к с о и и с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с а с с а с а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а а &rdquo;. ПодробнÉ.

Проверка по слову может также появляться, если вы вводите сложные запросы, обычно распространяемые автоматизированными системами, или же вводите запросы очень часто.

Usando um Kinect como uma câmera infravermelha

Este projeto mostrará como o Microsoft Kinect pode ser modificado para ser usado como uma câmera infravermelha (IR).

  • Tempo necessário: 2-3 horas
  • Imprima este projeto

Usando um Kinect como uma câmera infravermelha

Por Damon Conover

Damon Conover

O Kinect é um periférico para o console Xbox 360 que permite que um usuário interaja com o Xbox 360 sem tocar em um controlador. Uma descrição geral do Kinect é que é uma câmera de profundidade. Isso significa que você pode colocar objetos na frente dele e calculará a distância dele aos objetos, criando uma imagem de profundidade. Portanto, o Kinect pode fornecer a localização dos objetos em uma imagem em relação a si mesma, e essas informações podem ser usadas em uma variedade de projetos. Além disso, o Kinect contém muitos componentes que, com pequenas modificações, podem ser usados ​​para novos fins. Como exemplo, este projeto mostrará como o Kinect pode ser usado como uma câmera infravermelha (IR).

Para uma descrição detalhada de como o Kinect funciona e como ele pode ser usado em projetos diferentes, recomendo que você leia Fazendo as coisas verem Por Greg Borenstein (http: // shop.Oreilly.com/produto/06369200…). A imagem na etapa 1 mostra os componentes do Kinect necessários para entender este projeto. O projetor de RI brilha uma grade de pontos de infravermelho nos objetos na frente dele. Não somos capazes de ver os pontos, mas a câmera IR pode detectá -los. Usando o padrão de pontos em cada objeto, o Kinect é capaz de calcular a imagem de profundidade. O componente final é uma câmera RGB que é semelhante a uma webcam padrão.

Etapas do projeto

Instale o software necessário para conectar o Kinect ao seu computador

Siga as instruções específicas da plataforma aqui para:

Instale drivers OpenNi, Nite, Sensor e Sensorkinect

Instale a Biblioteca Simplespenni para processamento

Verifique se a instalação foi bem -sucedida

Comece a processar e executar os exemplos de profundidade e de profundidade.

Forneça energia ao seu Kinect e conecte -o ao seu computador através da porta USB.

Vá para Arquivo → Exemplos → Bibliotecas Contribuídas → Simplesopenni → Openni.

Clique duas vezes no exemplo que você deseja executar (por exemplo, de profundidade), e o script de exemplo será aberto.

Clique no botão Executar e uma imagem aparecerá na sua tela. Para o script de profundidade, uma imagem de profundidade estará à esquerda e uma imagem IR estará à direita, como mostrado à esquerda.

Bloqueie o projetor de IR

Como pode ser visto na etapa anterior, a imagem IR produzida pelo script de profundidade contém um padrão de pontos que desejamos remover.

Para fazer isso, crie uma venda para cobrir o projetor de infravermelho.

Pegue duas tiras de fita adesiva, cada uma com mais de 9 polegadas, e coloque uma de forma que se sobreponda ligeiramente ao outro. Em seguida, repita usando mais duas tiras de fita adesiva.

Pegue as duas tiras de fita adesiva de largura dupla e coloque lados pegajosos juntos.

Corte a tira resultante para 9 polegadas de comprimento.

Coloque as almofadas Velco em uma extremidade da faixa, enrole a tira ao redor do Kinect, cobrindo o projetor de RI e coloque as almofadas de velco opostas, de modo que a faixa seja mantida apertada, como mostrado à esquerda.

Construa as lâmpadas de IR

Agora que o projetor de RI foi bloqueado, não há mais luz de infravermelho suficiente para a câmera IR gerar uma boa imagem.

Portanto, a iluminação externa de IR precisa ser adicionada. O diagrama de circuito à esquerda mostra um design possível para duas lâmpadas de IR.

Conecte a fonte de alimentação DC ao conector de energia e meça sua tensão (VDC) usando um multímetro. Para minha fonte de alimentação, VDC = 15.6 v.

Procure a tensão avançada típica (VF) e a corrente de avanço máximo (se, máximo) dos LEDs. Os meus eram vf = 1.5 V e se = 20 Ma, respectivamente.

Calcule a resistência (r1 = r2 = r3 = r4) necessária para limitar a corrente através de cada série de seis LEDs. Eu usei resistores de 360 ​​Ω. R> ((VDC – (# de LEDs)*vf)/if)

Construa as lâmpadas IR (continuação)

Em metade de um PCB, coloque seis LEDs e um resistor. Fios de solda que conectam os LEDs, cátodo ao ânodo e o resistor. Repita para a outra metade do PCB. Em seguida, solde um fio que conecta os ânodos livres e outro fio que conecta a extremidade livre dos resistores.

Solde um fio longo e vermelho nos ânodos conectados e um fio longo e preto aos resistores conectados.

(Opcional) Use Sugru para manter os fios longos no PCB, a fim de fornecer algum alívio de tensão.

Pique os orifícios no fundo de um copo de plástico, alimente os fios através do orifício e pressione o PCB firmemente no copo. Se o PCB não se encaixar firmemente, use Sugru para segurá -lo no lugar.

Repita as quatro etapas anteriores para a segunda lâmpada.

Construa o controlador de intensidade da lâmpada

Use pinças para medir os tamanhos dos orifícios necessários para montar os dois vasos, interruptor, suporte de fusível e conector de energia.

Furos de perfuração no gabinete do projeto e monte o hardware. Além disso, faça dois pequenos orifícios para os fios entrarem. Ao planejar onde colocar cada buraco, lembre -se de onde cada parte ficará no recinto, para garantir que tudo se encaixe.

Você precisará abrir o buraco para o conector de energia usando uma ferramenta Dremel ou com uma faca.

Coloque Sugru no interior e fora do recinto para manter o macaco no lugar.

Construa o controlador de intensidade da lâmpada (continuação)

Vire cada pote na posição que será a configuração baixa e depois use seu multímetro&rsquo;S Testador de continuidade para encontrar os dois pinos que serão usados ​​no circuito (o testador apitará).

Além disso, use o testador de continuidade para determinar quais dois pinos no comutador estão conectados quando o interruptor estiver acima e quais são conectados quando o interruptor está abaixo.

Solda Fios curtos que conectam as peças dentro do gabinete, de acordo com o diagrama de circuito.

Solda dois fios longos e vermelhos nos vasos e dois fios pretos compridos no interruptor, e depois cutuque -os pelos dois pequenos orifícios.

Afaste -se no recinto&rsquo;s Tampa e coloque um fusível no porta -fusíveis.

Torça os fios que saem das lâmpadas junto com os fios que entram no controlador (vermelho a vermelho, preto para preto), solda, se necessário, e cubra os fios expostos com fita elétrica.

Monte o Kinect e as lâmpadas

Coloque o Kinect em uma superfície, apontado para o objeto que você deseja imaginar.

(Opcional) Conecte o Kinect ao conector do tripé e depois a um tripé. Conecte o tripé a um suporte de anel e posicione -o em frente à superfície de imagem.

Monte as lâmpadas em uma orientação de forma que a superfície de imagem seja iluminada.

(Opcional) Conecte as lâmpadas ao suporte do anel e mantenha -as em posição com as grampos, dobradiças e fita.

Conecte a fonte de alimentação do adaptador de parede em uma tomada e depois conecte-a ao controlador de intensidade da lâmpada através do conector de energia.

Execute o experimento

Pegue um pedaço de papel de construção e desenhe um objeto no lado esquerdo e outro no lado direito, usando um lápis de carvão.

Color.

Coloque o papel na frente da câmera.

Processamento aberto, crie scripts rgb_save.PDE e ir_save.PDE (O código é fornecido no código anexado.pdf), modifique o código de modo que os arquivos e nomes de caminho sejam apropriados para o seu computador, execute rgb_save.PDE, e depois corra ir_save.PDE.

Ligue as lâmpadas lançando o interruptor e depois ajuste a intensidade usando os botões no controlador. Você não poderá ver a luz IR emitida pelos LEDs; portanto, use o vídeo IR capturado pela câmera para determinar a intensidade desejada. Você precisará executar os dois scripts novamente, depois de ajustar as lâmpadas.

A imagem resultante, mostrada à esquerda, deve mostrar uma imagem colorida na parte superior e um vídeo IR na parte inferior. Os resultados mostram que os dois pigmentos parecem semelhantes na parte da cor do espectro, mas muito diferente na parte IR.

Para uma descrição detalhada da ciência por trás deste experimento, recomendo que você leia os papéis de Delaney et al. listado nas referências.

Referências

Wiki simples-aberto (acessado pela última vez em 20 de abril de 2012). *** Os exemplos incluídos na caixa de ferramentas são particularmente úteis.

Borenstein, Greg, Fazendo as coisas verem, O&rsquo;Reilly Media, Inc., 978-1-449-30707-3, janeiro de 2012.

Reas, Casey e Ben Fry, Introdução ao processamento, O&rsquo;Reilly Media, Inc., 978-1-449-37980-3, junho de 2010.

Blake, Joshua, &ldquo;Hacking Kinect&rdquo;, Make:, volume 29, 124-133, http: // makeprojects.com/wiki/29#seção_… (acessado pela última vez em 20 de abril de 2012).

Delaney, John K., Elizabeth Walmsley, Barbara H. Berrie e Colin F. Fletcher, &ldquo;Imagem multiespectral de pinturas no infravermelho para detectar e mapear pigmentos azuis&rdquo;, (Sackler NAS Colóquio) Exame científico da arte: técnicas modernas em conservação e análise, Anais da Academia Nacional de Ciências, 120-136, http: // www.sesta.Edu/catálogo/11413.HTML (último acesso em 20 de abril de 2012), 0-309-54961-2, 2005.

Delaney, John K., Jason G. Zeibel, Mathieu Thoury, Roy Littleton, Kathryn M. Morales, Michael Palmer, e. René de la Rie, &ldquo;Espectroscopia de imagem de refletância visível e infravermelha de pinturas: mapeamento de pigmentos e refletografia infravermelha aprimorada&rdquo;, Q3A: Optics for Arts, Architecture e Archaeology II, editado por Luca Pezzati e Renzo Salimbeni, Proc. de spie vol. 7391, 2009.

Agradecimentos

O autor deseja agradecer ao Dr. Murray Loew, da Universidade George Washington, e DR. John Delaney e DR. E. Melanie Gifford, da Galeria Nacional de Arte, Washington, D.C., Para seus comentários sobre a configuração experimental.

O autor também deseja reconhecer o apoio à bolsa que recebeu da Fundação de Rewards para Cientistas da Faculdade (ARCS) da Achievement (ARCS).

Conclusão

Nota: Depois de instalar com sucesso o software para conectar o Kinect ao seu computador, as únicas etapas necessárias para concluir este projeto são: 1) bloquear o projetor de IR, 2) construir e montar uma fonte de luz de IR de substituição (com um comprimento de onda central próximo a 830 nm) e 3) Experimento. Os detalhes do meu aparelho e experimento são fornecidos, mas encorajo você a modificar os detalhes com base nas peças e equipamentos que você tem disponível e com base nas coisas que deseja imaginar. Feliz edifício!

Como a detecção de movimento funciona no Xbox Kinect

O protótipo para Microsoft&rsquo;S Câmera Kinect e Microfone custam famosamente US $ 30.000. À meia -noite de quinta -feira de manhã, você&rsquo;Será capaz de comprá -lo por US $ 150 como um periférico Xbox 360. A Microsoft está projetando que venderá 5 milhões de unidades entre agora e Natal. Nós&rsquo;Terei mais detalhes e uma revisão do sistema em breve, mas para […]

Salvar história

Salvar história

O protótipo da câmera Kinect e do microfone da Microsoft custa famosamente US $ 30.000. À meia -noite de quinta -feira de manhã, você poderá comprá -lo por US $ 150 como um periférico Xbox 360.

A Microsoft está projetando que venderá 5 milhões de unidades entre agora e Natal. Teremos mais detalhes e uma revisão do sistema em breve, mas por enquanto vale a pena levar algum tempo para pensar em como tudo funciona.

Câmera

A câmera do Kinect é alimentada por hardware e software. E faz duas coisas: gerar uma imagem tridimensional (em movimento) dos objetos em seu campo de vista e reconhecer os seres humanos (em movimento) entre esses objetos.

Os programas de software mais antigos usaram diferenças de cor e textura para distinguir objetos de seus antecedentes. PrimeSense, a empresa cuja tecnologia pode Kinect, e a recente aquisição da Microsoft Canesta usam um modelo diferente. A câmera transmite luz invisível no infravermelho próximo e mede seu “tempo de voo” depois de refletir os objetos.

O tempo de voo funciona como o sonar: se você sabe quanto tempo leva a luz para retornar, você sabe a que distância um objeto está. Lance um grande campo, com muitos pings indo e voltando à velocidade da luz, e você pode saber quão longe muitos objetos estão.

O uso de um gerador infravermelho também resolve parcialmente o problema da luz ambiente. Como o sensor não foi projetado para registrar luz visível, ele não recebe tantos falsos positivos.

PrimeSense e Kinect vão um passo adiante e codificam informações na luz próxima do IR. À medida que essas informações são retornadas, algumas delas são deformadas-o que, por sua vez.

Com essa tecnologia, o Kinect pode distinguir a profundidade dos objetos em 1 centímetro e sua altura e largura dentro de 3 mm.

Um controlador de videogame tradicional é individual e serial: sou eu e o que estou controlando na tela versus você e o que você está controlando. Podemos jogar cooperativamente, mas somos basicamente entidades discretas isoladas uma da outra, manipulando objetos em nossas mãos.

Um controlador de videogame também é um dispositivo altamente especializado. Pode fazer um trabalho leve como um controle remoto, mas os botões, D-pads, joysticks, acelerômetros, giroscópios, mecanismos de feedback e interface hápticos com o console são todos projetados para comunicar tipos muito específicos de informações.

Kinect é algo diferente. É comunitário, contínuo e geral: uma interface natural do usuário (ou nui) para multimídia, em vez de uma GUI para jogos.

Mas é preciso muita tecnologia para fazer uma interface como essa se junta perfeitamente e “naturalmente.”

Kinect 2 mãos em laboratórios

Imagem infravermelhaLaboratório 2: Exibindo dados infravermelhos

Tempo estimado para concluir: 20 minutos

Este laboratório faz parte de uma série de mãos em laboratórios que ensinam como criar um Windows 8.1 Aplicação da loja, usando quase todas as características disponíveis do Kinect 2. Este é o segundo laboratório da série. Neste laboratório, você aprenderá como recuperar o feed infravermelho do sensor Kinect e como apresentar o feed em xaml como uma imagem.

  • Como abrir o leitor de quadro infravermelho no sensor Kinect no código.
  • Como receber o quadro infravermelho quando estiver pronto.
  • Como converter os dados do quadro infravermelho em um bitmap monocromático
  • Como apresentar o bitmap em mudança para xaml.
  • Como obter e apresentar dados sobre o status e a resolução do Kinect 2.

Exercício 1 – exibindo o quadro infravermelho

  1. Abra o existente Amostra do Kinect 2 Solução no Visual Studio, ou a cópia que você tem do final do laboratório anterior.
  2. Primeiro você abrirá o Leitor de quadro infravermelho Para recuperar dados de infravermelho do sensor Kinect. Abra o Página principal.xaml.cs arquivo do Solution Explorer. O código que você escreve configurará o feed, os eventos e os dados do infravermelho, antes de abrir o sensor Kinect. Quando o Kinect começa a entregar quadros, você tem algo recebendo a entrada. Para explicar o seguinte código aqui está uma descrição das variáveis ​​importantes:
    • infravermelho de infravermelho – Leitor para quadros de infravermelho
    • infravermelhoFramaData – Armazenamento intermediário para receber dados do quadro do sensor
    • infravermelho – Armazenamento intermediário para dados de quadros convertidos em pixels coloridos para exibição
    • bitmap – o writitableBitmap que substituirá o conteúdo de uma imagem em xaml

Um novo quadro é recebido do leitor de quadros quando estiver pronto, geralmente a cerca de 30 quadros por segundo. Cada quadro chega como dados infravermelhos para cada pixel da resolução da câmera. Esses dados são convertidos em uma gama de cores em escala de cinza, no infravermelho Pixels. Em seguida, os infravermelhos são usados ​​para escrever em um objeto de bitmap.

Todas essas variáveis ​​precisam ser inicializadas com o tamanho apropriado, que é o tamanho do quadro infravermelho proveniente do Kinect 2.

Para inicializar essas variáveis ​​corretamente, copie o código destacado abaixo:

// . outros namespaces usando o Windows.Ui.Xaml.meios de comunicação.Imagem; namespace Kinect2Sample < public sealed partial class MainPage : Page < // Size of the RGB pixel in the bitmap private const int bytesperpixel = 4; private KinectSensor KinectSensor = nulo; privado writeablebitmap bitmap = null; // quadro infravermelho infravermelho privado de infravermelho infravermelho privado = null; privado ushort [] infravermelhoframedata = null; byte privado [] infravermelhopixels = null; Public Mainpage () < // one sensor is currently supported this.kinectSensor = KinectSensor.GetDefault(); // get the infraredFrameDescription from the // InfraredFrameSource Framamedescription infravermingscription = esse.KinectSensor.InfravermelhoFameSource.Framedescription; // Abra o leitor para os quadros de infravermelho esse.infravermelho infravermelho = esse.KinectSensor.InfravermelhoFameSource.OpenReader (); // manipulador de arame para chegada ao quadro esse.infravermelho de infravermelho.Framearrived += esse.Reader_InfrandedFramearrived; // aloca espaço para colocar os pixels sendo // recebidos e convertidos esse.infravermelho infravermelho = New Ushort [infravermelho.Largura * infravermelhoFramameDescription.Altura]; esse.infraredpixels = Novo byte [infravermelhoframedescription.Largura * infravermelhoFramameDescription.Altura * bytesperpixel]; // Crie o bitmap para exibir esse.bitmap = Novo WriteableBitmap (infraredFameDescription.Largura, infravermelhoFramameDescription.Altura); // Abra o sensor isto.KinectSensor.Abrir(); esse.InicializeComponent (); >>>

Página principal da classe parcial selada < // . Private Void Reader_InfrandedFramearrived (remetente de objeto, Infravermelho de infravermelho < bool infravermelho infravermelhoProcedprocedes = false; // infravermelho é idisposto usando (infravermelho infravermelho infravermelho = e.Framereferência.Adquirirframe ())  if (infravermelho infravermelho != nulo) < Framamedescription infravermingscription = infravermelho.Framedescription; // Verifique os dados e escreva os novos dados do quadro infravermelho // para o exibir bitmap if (((infravermelho.Largura * infravermelhoFramameDescription.Altura) == isso.infravermelhoFramaData.Comprimento) && (InfraredFameDescription.Largura == esse.bitmap.Pixelwidth) && (InfraredFameDescription.Altura == esse.bitmap.PixelHeight))  // Copie os dados do pixel da imagem para A // Matriz temporária infravermelho.Copyfamedatatoarray ( esse.infravermelhoFramedata); infravermelho infravermelhoProced = true; > > > // Temos um quadro, convertemos e renderizamos IF (infravermelho  ConvertInFaredDatatopixels (); RenderpixElArray (isso.infraredpixels); > > >

Página principal da classe parcial selada < /// & ltsummary & gt /// o valor mais alto que pode ser retornado no frameframe infravermelho. /// é lançado para um flutuador para legibilidade no código de visualização. /// & lt/resumo e gt const privado Float infravermolsourceValuemAmumum = (flutuar) Ushort.Valor máximo; /// & lt/resumo e gt /// usado para definir o limite inferior, pós -processamento, do /// dados infravermelhos que renderizamos. /// Aumentar ou diminuir esse valor define um brilho /// "parede", mais perto ou mais longe. /// & lt/resumo e gt Const Private Float InfruearoutputValueminimum = 0.01f; /// & ltsummary & gt /// o limite superior, pós -processamento, do /// dados infravermelhos que renderizarão. /// & lt/resumo e gt const privado FLOAT INFRAREDOUTPUPTVALUEMAXIMUM = 1.0f; /// & ltsummary & gt /// o valor infravermelho /// Valor infravermelho médio da cena. /// este valor foi selecionado analisando a média /// intensidade de pixel para uma determinada cena. /// isso pode ser calculado em tempo de execução para lidar com diferentes /// Condições de IR de uma cena (fora vs dentro). /// & lt/resumo e gt Const Private Float InfraomsceneValueaverage = 0.08f; /// & ltsummary & gt /// o valor infravermelho /// o número de desvios padrão para se aplicar a /// infravermelho. /// Este valor foi selecionado analisando dados de uma determinada cena. /// isso pode ser calculado em tempo de execução para lidar com diferentes /// Condições de IR de uma cena (fora vs dentro). /// & lt/resumo e gt Const Private Float infraverscenestandarddevions = 3.0f; //. Outras variáveis ​​privadas seguem>

Página principal da classe parcial selada < // Reader_InfraredFrameArrived() before this. Void privado ConvertInFaredDatatopixels () < // converte o infravermelho para RGB int colorpixelindex = 0; para (int i = 0; i < this.infraredFrameData.Length; ++i) // normalizando os dados infravermelhos de entrada (ushort) para // um flutuador que varia de infravermelho // para infravermelho // 1. dividindo o valor recebido pelo // Valor máximo de origem float intensityratio = (flutuação) isto.infravermelhofraadfamedata [i] / Infravermelho infravermelho; // 2. Dividindo pelo // (valor médio da cena * desvios padrão) intensidaderatio /= Infravermelho // 3. Limitando o valor ao infravermelho intensidaderatio = matemática.Min (infravermelho em infravermelho, intensidaderatio); // 4. Limitando o valor inferior infravermelho intensidaderatio = matemática.MAX (infravermelho, intensidaderatio); // 5. convertendo o valor normalizado em um byte e usando // o resultado como os componentes RGB exigidos pela imagem intensidade de byte = (byte) (intensidaderatio * 255.0f); esse.infravermelho Pixels [colorpixelindex ++] = intensidade; //Azul esse.infravermelho Pixels [colorpixelindex ++] = intensidade; //Verde esse.infravermelho Pixels [colorpixelindex ++] = intensidade; //Vermelho esse.infravermelho Pixels [colorpixelindex ++] = 255; //Alfa > > >

Página principal da classe parcial selada < // convertinFaredDatatopixels () antes disso. private void renderpixelarray (byte [] pixels)  píxeis.Copyto (isso.bitmap.Pixelbuffer); esse.bitmap.Invalidar(); FRAMEDISPLAYIMAGE.Fonte = this.bitmap; > >

& ltGrid background = "" & gt & ltgrid margin = "30" & gt & ltgrid.RowDefinitions & gt & ltrowdefinition altura = "70"/& gt & lTrowDefinition Height = "*"/& gt & ltrowdefinition altura = "100"/& gt & lt/grade.RowDefinitions> & lttextblock grade.Linha = "0" Style = "" Text = "Kinect for Windows 2"/> & ltimage x: name = "FramedisplayImage" grade.Linha = "1" Stretch = "Uniform"/> & lt/grade> & lt/grade>

Imagem infravermelha

Por diversão, tente desligar as luzes. A luz infravermelha é invisível para os seres humanos e, portanto, a câmera funciona mesmo na escuridão completa, essa é a base de como a visão noturna funciona.

  • Como uma tarefa opcional, tente alterar os valores const que foram definidos na etapa 4 deste exercício e veja a diferença que eles fazem na saída do quadro resultante. Você verá a profundidade e o brilho da visibilidade da mudança de imagem, dependendo desses valores.
  • Laboratório 2: Exibindo dados infravermelhos

    Este exercício mostrará como apresentar dados úteis de depuração sobre o quadro infravermelho atual e também o status atual do Kinect. Este exercício ajudará você a solucionar problemas de problemas com o Kinect posteriormente e a destacar a diferença de resolução entre os quadros nos próximos exercícios.

    Para recuperar e exibir dados do quadro do Kinect 2, siga as etapas abaixo:

    Imagem de configuração

    1. Em primeiro lugar, você deve ter notado que o Designer Ao visualizar o XAML, não está disponível ao criar arquiteturas x64. Que&rsquo;está bem porque o Kinect 2 também é compatível com a arquitetura x86, à qual você pode mudar agora:
      1. Clique CONSTRUIR então Gerenciador de configuração… Para abrir o gerente de configuração.
      2. Clique na caixa suspensa em Solução ativa Plataforma: e selecione x86.
      3. Clique Fechar.
      4. Agora abra as propriedades do projeto clicando com o botão direito do mouse no projeto Kinect2Sample no Solution Explorer, depois clicando Propriedades.
      5. Clique no Construir Guia à esquerda, depois ao lado Plataforma: Selecione x86 do menu suspenso.
      6. Clique ARQUIVO, então Salvar tudo ou acertar Ctrl + Shift + S Para salvar todos os arquivos.
      7. Construir e correr o aplicativo para verificar se há erros.
    2. As coisas em que você deve se concentrar são as status do Kinect (se estiver respondendo ou não) e o Resolução atual do quadro (o que é interessante agora e mais tarde quando o laboratório muda de tipo de quadro). É fácil o suficiente para obter esses valores em código atrás. Para permitir que o XAML se vincule aos valores de status, se eles mudarem, você deve implementar o InotifyPropertyChanged interface no Página principal aula. Em seguida, o código demitirá o evento da propriedade quando o status mudar e quando a descrição do quadro mudar. Para configurar isso, primeiro copie o seguinte código destacado nas seções relevantes do Página principal classe para inicializar e usar propriedades mutáveis:

      usando o sistema.ComponentModel; namespace Kinect2Sample < public sealed partial class MainPage : Page, InotifyPropertyChanged < // . consts and other private variables. private KinectSensor kinectSensor = null; String privada statustext = null; privado writeablebitmap bitmap = null; Private FramedEdScription currentFramedescription; // variáveis ​​de quadro infravermelho. Propriedade de Evento Público PropertyChangedEventHandler PropertyChanged; public string statustext  pegar definir  se este.Statustext != valor)  esse.statustext = value; se este.PropertyChanged != nulo)  esse.PropertyChanged (isto, novo PropertyChangedEventArgs ("Statustustext")); > > > > FRAMAMEDSCRIÇÃO PÚBLICA CURRENFRAMEDESCRIÇÃO  pegar definir  se este. CurrentFameDescription!= valor)  esse. currentFameDescription = value; se este.PropertyChanged != nulo)  esse.PropertyChanged (isto, novo PropertyChangedEventArgs ("CurrentFameDescription")); > > > > // . >>

      Public Mainpage () < // . // create the bitmap to display this.bitmap = new WriteableBitmap(infraredFrameDescription.Width, infraredFrameDescription.Height); esse.CurrentFameDescription = infravermelhoFramameDescription; // Definir notificador de evento isavailablechanged esse.KinectSensor.IsavailableChangeed += esse.Sensor_isavailableChangeed; // Use o objeto da janela como modelo de exibição neste exemplo esse.Datacontext = this; // Abra o sensor isto.KinectSensor.Abrir(); esse.InicializeComponent (); > Private Void Sensor_isavailableChanged (remetente KinectSensor, IsavailableChangedEventArgs args)  esse.Statustext = this.KinectSensor.Está disponível ? "Running": "não disponível"; > 

      & lttextblock grade.Linha = "0" style = "" text = "Kinect for Windows 2"/& gt & ltstackpanel grade.Linha = "0" orientação = "horizontal" Horizontalalignment = "Right" Verticalalignment = "Bottom" & GT & lttextBlock text = "Status do Kinect:"/& gt & lttextBlock text = ""/& gt & lttextBlock text = ", estrutura de estrutura"/& gt & lttextBlock text = ", FrameHeight"/& gt & LT/Stackpanel & GT & ltimage x: name = "FramedisplayImage" grade.Linha = "1" Stretch = "Uniform"/& gt

      Construir imagem

      Tente desconectar o Kinect e veja a mudança de status. Então, se você conectar o Kinect de volta, o status será atualizado e o feed voltará.

      Resumo

      Este laboratório te ensinou como Recuperar e usar um quadro infravermelho do dispositivo Kinect 2 e Use esses dados do quadro para fazer um bitmap visível ser exibido em xaml.

      É interessante notar que a maior parte desse processo é manual. Os dados do Infravermelho não é utilizável até que&rsquo;S convertido em um bitmap. Isso é posterior, pois existem muitos usos de luz infravermelha além de convertê-la em uma imagem visível. O Kinect 2 usa a câmera infravermelha para calcular corpos e formas conhecidos em condições de pouca luz. É por isso que a resolução do frameframe é tão baixa: Combina a resolução vista pelo frame de profundidade Para calcular o que é e não é&rsquo;T uma pessoa.

      No próximo laboratório, você verá a diferença de resolução entre o quadro de cores e o quadro infravermelho agora que exibiu os dados do quadro em xaml.

      Há código disponível, que é a solução de código preenchida do trabalho neste laboratório. O próximo laboratório começará a partir deste código.