Olá a todos - Tenho trabalhado nisso por quase 3 dias e finalmente desenvolvi uma metodologia para importar vídeo do drone DJI FPV para o Drone2Map com o objetivo de criar ortomosaicos e outros projetos 2D. Não consegui encontrar nenhuma informação ou literatura anterior sobre uma metodologia para integrar o drone DJI FPV ao sistema Drone2Map, então espero que isso possa ajudar a próxima pessoa que estiver procurando uma resposta para essa questão. Tenho certeza de que existem maneiras melhores de fazer o que estou prestes a detalhar, e se houver, por favor me avise. Além disso, se essa metodologia tiver alguma utilidade para outros drones, por favor me informe. <\/P>
Antes de começar, gostaria de expor algumas suposições\/avisos. Essa metodologia foi desenvolvida apenas para converter vídeo capturado em ângulo nadir-para-oblíquo em imagens estáticas georreferenciadas que podem ser importadas para o Drone2Map. Requer um conforto mínimo com interação via linha de comando e edição de scripts python, alguns aplicativos de terceiros além do Drone2Map, e atenção à sua altitude e tempos durante o voo (a leitura de altitude do DJI FPV é consistentemente imprecisa e inútil). Estou assumindo que, para a maioria das pessoas, as imagens serão capturadas a uma altura constante sobre terreno plano(ou quase). Isso pode ser uma suposição incorreta, mas é a feita neste resumo. Para que esse processo funcione, você deve ter o drone DJI FPV configurado para gravar dados SRT.<\/EM> Isso está ativado por padrão, mas pode ser alternado no menu de configurações do sistema. Essa metodologia também requer: VLC Media Player<\/STRONG>, Exif Tool<\/STRONG>, um software de edição de scripts <\/STRONG>(eu uso Visual Studio).<\/P>O VLC Media Player pode ser encontrado aqui: https:\/\/www.videolan.org\/vlc\/download-windows.html<\/A><\/P>Exif Tool aqui (baixe o executável para Windows e instale. Mude o nome do aplicativo de "exiftool(-k).exe" para "exiftool.exe" e depois coloque-o no diretório C:\Windows): https:\/\/exiftool.org\/<\/A> <\/P>Visual Studio Code aqui: https:\/\/code.visualstudio.com\/download<\/A> <\/P>Com tudo isso pronto, é hora de começar. A primeira coisa é criar um diretório de trabalho. Para este exemplo, vou chamá-lo de "C:\User\YOUR_NAME\Documents\FPV Geotagging". Mova seus dados (vídeo e .SRT) do seu cartão microSD para esse diretório. Faça cópias desses dados agora, por precaução. Acesse este site: https:\/\/djitelemetryoverlay.com\/srt-viewer\/<\/A>. Na página inicial, clique em "Load File(s)" e faça upload do arquivo .SRT do vídeo do voo que deseja converter em imagens georreferenciadas. Maravilhe-se com a visualização incrivelmente legal da sua trajetória de voo e dados. Baixe os dados da telemetria como CSV. Este será um registro dos dados GPS Lat\/Lon\/Altitude (se você confiar nesse último, eu pessoalmente não confio) para cada frame do vídeo. Salve isso em nosso diretório de trabalho.<\/P>Abra seu vídeo FPV no VLC Media Player. Abra o menu Ferramentas e selecione Preferências. No canto inferior esquerdo da janela Preferências que acabou de abrir haverá um botão para alternar entre preferências simples e avançadas. Selecione preferências avançadas. No menu à esquerda, role até o menu "Vídeo". Clique no menu suspenso para ver todas as preferências de vídeo e clique em "Filtros". A metade direita desta janela deve listar vários filtros com caixas de seleção ao lado de cada um. Marque o filtro chamado "Scene video filter" (na minha versão do VLC, é o terceiro do topo na segunda coluna). Com esse filtro selecionado, volte ao menu rolável à esquerda e clique na seta suspensa ao lado da palavra "Filtros". Role para baixo e selecione "Scene filter". Altere as preferências para que o formato da imagem seja "JPG" e o prefixo do caminho do diretório seja nosso diretório de trabalho ("C:\User\YOUR_NAME\Documents\FPV Geotagging" neste caso). Em seguida, ajuste a taxa de gravação conforme a taxa de quadros da sua câmera e quantas fotos deseja exportar deste vídeo. O DJI FPV grava a 60 quadros por segundo, então defini a taxa de gravação como 60 para capturar uma foto a cada segundo do vídeo. Para mais informações sobre como isso funciona e qual taxa usar, confira este ótimo guia (https:\/\/www.vlchelp.com\/automated-screenshots-interval\/#:~:text=Expand%20further%2C%20Video%20%3E%20Filters%20%3E,would%20make%20it%2050%20seconds<\/A>). Clique em Salvar no canto inferior direito e depois feche a janela do VLC. Reabra o vídeo no VLC e ele deve começar a exportar uma foto a cada segundo para nosso diretório de trabalho. Verifique se isso está acontecendo. Se não estiver, consulte o recurso vinculado anteriormente. Cada frame deve ser exportado como uma imagem nomeada "scene00001.jpg", "scene00061.jpg", "scene00121.jpg", etc. Os números após "scene" correspondem ao frame do vídeo do qual foram capturados (ou seja, "scene0001.jpg" é uma imagem JPG formatada do primeiro frame do vídeo). Com essas imagens salvas no diretório, é hora de georreferenciar as imagens. <\/P>Abra o Visual Studio Code, assim como o CSV que salvamos anteriormente. Se precisar configurar o VS Code, faça isso agora. Há muita documentação online sobre como fazer isso. Se estiver usando outro software editor de código, apenas ignore esta parte .<\/P>Assumindo que você está usando Microsoft Excel, volte ao CSV, crie uma nova coluna ao lado da coluna "FRAMECNT" chamada "File Name" (Nome do Arquivo). Destaque os valores da contagem dos frames na coluna "FRAMECNT", clique com o botão direito e selecione "Formatar células". No menu à esquerda, selecione "Especial" e depois "Código Postal" na coluna "Tipo". Isso adicionará zeros à esquerda na nossa contagem dos frames. Sei que existem outras formas de fazer isso e se você tiver um método melhor por favor compartilhe. Esta é apenas uma forma rápida e simples de fazer isso. Na primeira célula abaixo de "File Name", construa uma expressão para reconstruir o nome do nosso arquivo; neste caso queremos que "scene00001.jpg" esteja na primeira célula abaixo de "File Name", "scene00061.jpg" na segunda, e assim por diante. Certifique-se de colar esses nomes/criar essa nova coluna como Valores apenas. Crie uma nova planilha dentro deste CSV e abra uma janela do Explorador de Arquivos do Windows. Navegue até o diretório de trabalho. Ordene todos os arquivos pelo nome e destaque todos os arquivos das imagens do drone (e somente<\/EM> as imagens). Segurando shift, clique com o botão direito e selecione "Copiar como caminho..." Volte ao Excel e à nossa planilha em branco. Cole a lista dos arquivos. Crie uma nova coluna novamente chamada "File Name", e extraia os nomes dos arquivos da parte final dos caminhos dos arquivos que acabamos de colar (a fórmula "=RIGHT(A2,14)" deve funcionar). Arraste essa fórmula até o final da lista. Certifique-se de copiar e colar essa coluna como Valores). Crie cinco novas colunas chamadas "LATITUDE", "LAT REF", "LONGITUDE", "LON REF", e "ALTITUDE". Usando um X ou V lookup, retorne os valores latitudinais, longitudinais e altitude para cada arquivo usando as colunas "File Name" como ponto referência. Nas colunas Lat Ref/Lon Ref insira N/S ou E/W respectivamente (veja: https:\/\/exiftool.org\/faq.html#Q14<\/A> para explicação sobre isso). Pode haver formas melhores/fáceis/melhor explicadas para fazer isso; para aprender mais veja as páginas oficiais da Microsoft sobre X lookup e V lookup. Peço desculpas por qualquer confusão nisso aqui; o objetivo final é obter uma lista dos valores lat/lon/altitude para cada arquivo, algo que pode ser feito seguindo essas instruções que acabei de descrever. Quando terminar salve essa aba como um CSV próprio em nosso diretório de trabalho com o nome "SRT_Telemtry.csv".<\/P> <\/P>Voltando ao Visual Studio Code, cole o seguinte bloco:<\/P> <\/P> <\/P> <\/P>import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> Altere o caminho do arquivo para seu próprio diretório de trabalho (a string após o comando "open" na linha 3) e salve esse script em nosso diretório como "batch_exif_writing.py". Abra um terminal de comando e mude seu diretório para o diretório de trabalho (comando: "cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Digite "python batch_exif_writing.py" e pressione enter. Você deverá ver várias mensagens dizendo "1 image has been updated" passando pela janela do terminal enquanto todos os seus arquivos são georreferenciados.<\/P>Quando o script terminar (levou cerca de 5 minutos no meu computador), suas imagens estarão georreferenciadas e poderão ser carregadas no Drone2Map! Enfim, espero que este guia ajude alguém lá fora procurando usar o drone DJI FPV e o Drone2Map. Ainda estou trabalhando nas imagens para limpar quaisquer artefatos/partes indesejadas das imagens do processo de captura. Mas isso é um assunto para outro dia. Por favor, me avise se você tiver edições/sugestões/comentários/críticas sobre este processo. Tenho certeza de que existem maneiras mais fáceis de fazer isso, mas foi assim que funcionou para mim e tive que fazer no vácuo. Obrigado!<\/P>
Exif Tool aqui (baixe o executável para Windows e instale. Mude o nome do aplicativo de "exiftool(-k).exe" para "exiftool.exe" e depois coloque-o no diretório C:\Windows):
Visual Studio Code aqui:
Com tudo isso pronto, é hora de começar. A primeira coisa é criar um diretório de trabalho. Para este exemplo, vou chamá-lo de "C:\User\YOUR_NAME\Documents\FPV Geotagging". Mova seus dados (vídeo e .SRT) do seu cartão microSD para esse diretório. Faça cópias desses dados agora, por precaução. Acesse este site:
Abra seu vídeo FPV no VLC Media Player. Abra o menu Ferramentas e selecione Preferências. No canto inferior esquerdo da janela Preferências que acabou de abrir haverá um botão para alternar entre preferências simples e avançadas. Selecione preferências avançadas. No menu à esquerda, role até o menu "Vídeo". Clique no menu suspenso para ver todas as preferências de vídeo e clique em "Filtros". A metade direita desta janela deve listar vários filtros com caixas de seleção ao lado de cada um. Marque o filtro chamado "Scene video filter" (na minha versão do VLC, é o terceiro do topo na segunda coluna). Com esse filtro selecionado, volte ao menu rolável à esquerda e clique na seta suspensa ao lado da palavra "Filtros". Role para baixo e selecione "Scene filter". Altere as preferências para que o formato da imagem seja "JPG" e o prefixo do caminho do diretório seja nosso diretório de trabalho ("C:\User\YOUR_NAME\Documents\FPV Geotagging" neste caso). Em seguida, ajuste a taxa de gravação conforme a taxa de quadros da sua câmera e quantas fotos deseja exportar deste vídeo. O DJI FPV grava a 60 quadros por segundo, então defini a taxa de gravação como 60 para capturar uma foto a cada segundo do vídeo. Para mais informações sobre como isso funciona e qual taxa usar, confira este ótimo guia (
Abra o Visual Studio Code, assim como o CSV que salvamos anteriormente. Se precisar configurar o VS Code, faça isso agora. Há muita documentação online sobre como fazer isso. Se estiver usando outro software editor de código, apenas ignore esta parte .<\/P>
Assumindo que você está usando Microsoft Excel, volte ao CSV, crie uma nova coluna ao lado da coluna "FRAMECNT" chamada "File Name" (Nome do Arquivo). Destaque os valores da contagem dos frames na coluna "FRAMECNT", clique com o botão direito e selecione "Formatar células". No menu à esquerda, selecione "Especial" e depois "Código Postal" na coluna "Tipo". Isso adicionará zeros à esquerda na nossa contagem dos frames. Sei que existem outras formas de fazer isso e se você tiver um método melhor por favor compartilhe. Esta é apenas uma forma rápida e simples de fazer isso. Na primeira célula abaixo de "File Name", construa uma expressão para reconstruir o nome do nosso arquivo; neste caso queremos que "scene00001.jpg" esteja na primeira célula abaixo de "File Name", "scene00061.jpg" na segunda, e assim por diante. Certifique-se de colar esses nomes/criar essa nova coluna como Valores apenas. Crie uma nova planilha dentro deste CSV e abra uma janela do Explorador de Arquivos do Windows. Navegue até o diretório de trabalho. Ordene todos os arquivos pelo nome e destaque todos os arquivos das imagens do drone (e somente<\/EM> as imagens). Segurando shift, clique com o botão direito e selecione "Copiar como caminho..." Volte ao Excel e à nossa planilha em branco. Cole a lista dos arquivos. Crie uma nova coluna novamente chamada "File Name", e extraia os nomes dos arquivos da parte final dos caminhos dos arquivos que acabamos de colar (a fórmula "=RIGHT(A2,14)" deve funcionar). Arraste essa fórmula até o final da lista. Certifique-se de copiar e colar essa coluna como Valores). Crie cinco novas colunas chamadas "LATITUDE", "LAT REF", "LONGITUDE", "LON REF", e "ALTITUDE". Usando um X ou V lookup, retorne os valores latitudinais, longitudinais e altitude para cada arquivo usando as colunas "File Name" como ponto referência. Nas colunas Lat Ref/Lon Ref insira N/S ou E/W respectivamente (veja:
<\/P>
Voltando ao Visual Studio Code, cole o seguinte bloco:<\/P>
import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> Altere o caminho do arquivo para seu próprio diretório de trabalho (a string após o comando "open" na linha 3) e salve esse script em nosso diretório como "batch_exif_writing.py". Abra um terminal de comando e mude seu diretório para o diretório de trabalho (comando: "cd C:\Users\YOUR_NAME\Documents\FPV Geotagging"). Digite "python batch_exif_writing.py" e pressione enter. Você deverá ver várias mensagens dizendo "1 image has been updated" passando pela janela do terminal enquanto todos os seus arquivos são georreferenciados.<\/P>Quando o script terminar (levou cerca de 5 minutos no meu computador), suas imagens estarão georreferenciadas e poderão ser carregadas no Drone2Map! Enfim, espero que este guia ajude alguém lá fora procurando usar o drone DJI FPV e o Drone2Map. Ainda estou trabalhando nas imagens para limpar quaisquer artefatos/partes indesejadas das imagens do processo de captura. Mas isso é um assunto para outro dia. Por favor, me avise se você tiver edições/sugestões/comentários/críticas sobre este processo. Tenho certeza de que existem maneiras mais fáceis de fazer isso, mas foi assim que funcionou para mim e tive que fazer no vácuo. Obrigado!<\/P>
OMG this is amazing @RyanWalter . gonna try this out and let you know how it goes!
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.