[PYTHON] Création d'un environnement pour "Tello_Video" sous Windows

introduction

Cette page est

Exemple Tello-Run Python "Tello_Video"

C'est une page supplémentaire de.

Pas seulement pour "Tello_Video", Si vous voulez faire "Tello-Python" sous Windows, vous devez d'abord le faire, y compris l'installation de Python.

Aperçu

De l'exemple de programme officiel de DJI Python "Tello-Python" pour Tello  Tello_Video Afin d'essayer

--Installation de diverses bibliothèques dépendantes

Tu as besoin de faire.

La [page Tello-Python] de git (https://github.com/dji-sdk/Tello-Python/tree/master/Tello_Video#installation) a une méthode d'installation

· Les fenêtres

Go to the "install\Windows" folder,select and run the correct "windows_install.bat" according to your computer operating system bits.

est ce qu'il lit. C'est,

Déplacer des dossiers, modifier les attributs de fichier, exécuter des fichiers shell


> cd install¥Windows¥
> windows_install.bat

Cela signifie taper la commande. ** windows_install.bat ** </ font> est un fichier de commandes qui crée automatiquement l'environnement pour Windows.

Mais même si tu fais ça

  • La version Python spécifiée est 2.7.15. Je veux quand même installer la version finale 2.7.17
  • Dans le Python installé automatiquement, pip ne peut pas être utilisé à l'invite de commande, vous devez donc le réinstaller manuellement.
  • La version ffmpeg spécifiée est ancienne et le fichier n'existe pas, il ne peut donc pas être téléchargé.
  • Le téléchargement accéléré ne fonctionne pas et une erreur se produit.
  • Le téléchargement de l'exécution de VisualStudio ne fonctionne pas et génère une erreur
  • Puisque MD5 du fichier téléchargé est vérifié un par un, il est difficile de correspondre à différentes versions.

Eh bien, il y a beaucoup de bugs / problèmes. Divers travaux sont nécessaires pour résoudre ce problème.

Conditions préalables

Tello-Python est installé dans le dossier d'accueil (c: \ Users \ (nom d'utilisateur) ), Autrement dit, nous supposerons qu'il existe un dossier appelé c: \ Users \ (nom d'utilisateur) \ Tello-Python-master.

Aussi,

--Démarrage de l'invite de commande Windows

  • Modification du code de caractère du fichier texte (en fait le fichier BAT)

C'est également une prémisse majeure que vous avez les compétences nécessaires pour comprendre. Windows est pratique, mais si vous essayez de faire quelque chose d'étrange, c'est un environnement difficile (> _ <

Déplacer le dossier

Tout d'abord, dans l'Explorateur, accédez au dossier install \ Windows dans Tello-Video. tello_video_folder.png À l'intérieur du dossier se trouvent ʻinstall.bat et ʻuninstall.bat. ** Veuillez noter que l'utilisation de ce install.bat ne fonctionnera pas. </ font> **

En utilisant ce dossier comme zone de travail, nous effectuerons les tâches suivantes.

Créer un nouveau fichier BAT

Les fichiers Windows BAT ne fonctionnent pas correctement sauf si le code de caractère est Shift-JIS. (Je déteste Windows à cause de cette gêne)

** Copiez et collez le code suivant dans le Bloc-notes, sélectionnez [Fichier] - [Enregistrer sous], puis sélectionnez [Code de caractère] - [ANSI] pour enregistrer. </ font> ** Si vous utilisez un éditeur de texte, enregistrez-le avec [Shift-JIS]. Le nom du fichier est ʻinstall_new2020Mar12.bat`.

Pour le moment, le fichier est également placé dans github, mais le code de caractère est UTF-8. , Ne peut pas être utilisé tel quel. Veuillez convertir le code de caractère en [Shift-JIS].

install_new2020Mar12.bat


echo=1/*>nul&@cls
@echo off
setlocal enableDelayedExpansion
::runas administrator
%1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cls
::setlocal
call :setdir
call :configx86orx64
set extract=extract
set pythonLib="C:\Python27\Lib\site-packages\"
set /a maxRetry=3
set /a retryCount=0
echo ------------------------------------------------------

::-------------------down python2.7 and install-------------------
echo ------------------------------------------------------
echo                Downloading python2.7                  
echo ------------------------------------------------------
::Cette clé de registre est utilisée pour activer la prise en charge de plusieurs versions de ssl et tls et est utilisée pour résoudre un problème qui refuse l'accès au site Web officiel de Python.
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v SecureProtocols /t REG_DWORD /d 2728 /f >nul
set /a retryCount=0
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		goto downpython
	)
)
if exist %pythonPackage% goto :downpythoncheck
:downpython
call :down %pythonDown% %pythonPackage%
:downpythoncheck
call :checkMD5 %pythonPackage% %pythonMD5% MD5pass
if "%MD5pass%" == "NO" (
	set /a retryCount=!retryCount!+1 &&	if !retryCount! == %maxRetry% (
		echo Retried %maxRetry% times, all failed. Skip.
		goto downpythonend
	) else (
		echo Download %pythonPackage% failed. Retrying... !retryCount! of %maxRetry%
		goto downpython
	)
)
call :installmsiPackage %pythonPackage%
::python2.7 Ajouter des variables d'environnement
::wmic ne prend pas effet immédiatement, alors définissez
echo %PATH%|findstr "c:\python27" >nul
if %errorlevel% neq 0 (
	wmic ENVIRONMENT where "name='PATH' and username='<system>'" set VariableValue="%PATH%;c:\python27"
	set "path=%path%;c:\python27;"
)
echo %PATHEXT%|findstr ".PY;.PYM" >nul
if %errorlevel% neq 0 (
	wmic ENVIRONMENT where "name='PATHEXT' and username='<system>'" set VariableValue="%PATHEXT%;.PY;.PYM"
	set "pathext=%pathext%;.PY;.PYM;"
)
:downpythonend
::-------------------installation de python pip-------------------
echo ------------------------------------------------------
echo                   Downloading pip                    
echo ------------------------------------------------------
set /a retryCount=0
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		goto downpip
	)
)
if exist %pipPackage% goto :downpipcheck
:downpip
call :down %pipDown% %pipPackage%
:downpipcheck
call :checkMD5 %pipPackage% %pipMD5% MD5pass
if "%MD5pass%" == "NO" (
	set /a retryCount=!retryCount!+1 &&	if !retryCount! == %maxRetry% (
		echo Retried %maxRetry% times, all failed. Skip.
		goto downpipend
	) else (
		echo Download %pipPackage% failed. Retrying... !retryCount! of %maxRetry%
		goto downpip
	)
)
python %pipPackage%
python -m pip install -U pip
:downpipend
::-------------------libboost-all-installer dev-------------------
echo ------------------------------------------------------
echo                Downloading libboost                   
echo ------------------------------------------------------
echo Please wait a few minutes...
set /a retryCount=0
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		goto downlibboost
	)
)
if exist %libboostPackage% goto :downlibboostcheck
:downlibboost
call :down %libboostDown% %libboostPackage%
:downlibboostcheck
call :checkMD5 %libboostPackage% %libboostMD5% MD5pass
if "%MD5pass%" == "NO" (
	set /a retryCount=!retryCount!+1 &&	if !retryCount! == %maxRetry% (
		echo Retried %maxRetry% times, all failed. Skip.
		goto downlibboostend
	) else (
		echo Download %libboostPackage% failed. Retrying... !retryCount! of %maxRetry%
		goto downlibboost
	)
)
call %libboostPackage% /SILENT /NORESTART
:downlibboostend
::-------------------l'installation de ffmpeg est libavcodec sous Linux-dev libswscale-Dépend de deux de dev-------------------
echo ------------------------------------------------------
echo                  Downloading ffmpeg                   
echo ------------------------------------------------------
set /a retryCount=0
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		goto downffmpeg
	)
)
if exist %ffmpegPackage% goto :downffmpegcheck
:downffmpeg
call :down %ffmpegDown% %ffmpegPackage%
:downffmpegcheck
call :checkMD5 %ffmpegPackage% %ffmpegMD5% MD5pass
if "%MD5pass%" == "NO" (
	set /a retryCount=!retryCount!+1 &&	if !retryCount! == %maxRetry% (
		echo Retried %maxRetry% times, all failed. Skip.
		goto downffmpegend
	) else (
		echo Download %ffmpegPackage% failed. Retrying... !retryCount! of %maxRetry%
		goto downffmpeg
	)
)
call :unpack %ffmpegPackage% %extract%
:downffmpegend
echo ------------------------------------------------------
echo              Downloading VS2013 runtime         
echo ------------------------------------------------------
set /a retryCount=0
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		goto downvs2013
	)
)
if exist %vs2013package% goto :downvs2013check
:downvs2013
call :down %vs2013depend% %vs2013package%
:downvs2013check
call :checkMD5 %vs2013package% %vs2013MD5% MD5pass
if "%MD5pass%" == "NO" (
	set /a retryCount=!retryCount!+1 &&	if !retryCount! == %maxRetry% (
		echo Retried %maxRetry% times, all failed. Skip.
		goto downvs2013end
	) else (
		echo Download %vs2013package% failed. Retrying... !retryCount! of %maxRetry%
		goto downvs2013
	)
)
call %vs2013package% /passive /NORESTART
:downvs2013end
::-------------------python-numpy python-matplotlib opencv-installation de python(méthode pip)-------------------
echo ------------------------------------------------------
echo                  Downloading numpy                    
echo ------------------------------------------------------
python -m pip install numpy
echo ------------------------------------------------------
echo                Downloading matplotlib                 
echo ------------------------------------------------------
python -m pip install matplotlib
echo ------------------------------------------------------
echo              Downloading opencv-python                   
echo ------------------------------------------------------
python -m pip install -v opencv-python==3.4.2.17
echo ------------------------------------------------------
echo                  Downloading pillow                   
echo ------------------------------------------------------
python -m pip install pillow
:copydependencies
::-------------------C: Toutes les dll dans les bibliothèques dépendantes\ python27 \ lib \ site-Placer en colis-------------------
echo ------------------------------------------------------
echo                 Copying dependencies                  
echo ------------------------------------------------------
echo %extract%\%ffmpegPackage:~0,-4%\bin\ 
echo %libboostPackageCopy%
echo %libh264%
xcopy /Y /E /I %extract%\%ffmpegPackage:~0,-4%\bin\*.dll %pythonLib%
xcopy /Y /E /I %libboostPackageCopy% %pythonLib%
xcopy /Y /E /I %libh264%\*.pyd %pythonLib%
endlocal
echo ------------------------------------------------------
echo                  Installation done.                
echo ------------------------------------------------------
pause
goto :eof

::--------------------------------------------------------------------------------------------

::-----------------Ce qui suit est la zone de définition du contrôle MD5------------------
:checkMD5
set file=%~1
call :MD5get %file% MD5
if "%MD5%" equ "%~2" (
      echo MD5 identical.
	  set "%~3=YES"
) else (
	  if "%MD5%" equ "skip" (
		echo MD5 check skipped.
		set "%~3=YES"
	  ) else (
		echo Warning: MD5 does not match!
		set "%~3=NO"
	  )
)
goto :eof

::-----------------Ce qui suit est la zone de définition du contrôle MD5------------------
:MD5get
echo %~1
for %%# in (certutil.exe) do (
	if not exist "%%~f$PATH:#" (
		echo certutil.exe not found
		echo for Windows XP professional and Windows 2003
		echo you need Windows Server 2003 Administration Tools Pack
		echo https://www.microsoft.com/en-us/download/details.aspx?id=16770
		echo now skip the MD5 check
		if "%~2" neq "" (
			set "%~2=skip"
		)
		::exit /b 4
		goto :eof
	)
)

set "md5="
for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "%~f1" MD5') do (
	if not defined md5 (
		for %%Z in (%%#) do set "md5=!md5!%%Z"
	)
)

if "%~2" neq "" (
	set "%~2=%md5%"	
) else (
	echo %md5%
)

goto :eof

::-----------------Voici la zone de définition de changement de répertoire------------------
::L'exécution en mode administrateur modifie le chemin par défaut et renvoie le répertoire ici
:setdir
set char=%~dp0%
%char:~0,2%
cd  %~dp0%
goto :eof

::-----------------Voici la zone de définition de la fonction de version------------------
:configx86orx64
IF %PROCESSOR_ARCHITECTURE% == AMD64 (
	set versionFlag=win64
) else ( 
	set versionFlag=win32
)

echo Windows Version: %versionFlag%
if %versionFlag%==win64 (
	set pythonDown="https://www.python.org/ftp/python/2.7.17/python-2.7.17.amd64.msi"
	set pythonPackage=python-2.7.17.amd64.msi
	set pythonMD5="55040ce1c1ab34c32e71efe9533656b8"

	set pipDown="https://bootstrap.pypa.io/get-pip.py"
	set pipPackage=get-pip.py
	set pipMD5="b7666e8e7f98f513096601d4203fb007"

	set ffmpegDown="https://ffmpeg.zeranoe.com/builds/win64/shared/ffmpeg-20200311-36aaee2-win64-shared.zip"
	set ffmpegPackage=ffmpeg-20200311-36aaee2-win64-shared.zip
	set ffmpegMD5="500f89e0a230c26722bb128edc82d103"

	set libboostDown="https://nchc.dl.sourceforge.net/project/boost/boost-binaries/1.68.0/boost_1_68_0-msvc-12.0-64.exe"
	set libboostPackage="boost_1_68_0-msvc-12.0-64.exe"
	set libboostPackageCopy="c:\local\boost_1_68_0\lib64-msvc-12.0\boost_python27-vc120-mt-x64-1_68.dll"
	set libboostMD5="4e6b11a971502639ba5cc564c7f2d568"
	
	set libh264=..\..\h264decoder\windows\x64
	
	set vs2013depend="https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe"
	set vs2013package=vcredist_x64.exe
	set vs2013MD5="96b61b8e069832e6b809f24ea74567ba"
	
) else (
	set pythonDown="https://www.python.org/ftp/python/2.7.17/python-2.7.17.msi"
	set pythonPackage=python-2.7.17.msi
	set pythonMD5="4cc27e99ad41cd3e0f2a50d9b6a34f79"

	set pipDown="https://bootstrap.pypa.io/get-pip.py"
	set pipPackage=get-pip.py
	set pipMD5="b7666e8e7f98f513096601d4203fb007"
	
	set ffmpegDown="https://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-20200311-36aaee2-win32-shared.zip"
	set ffmpegPackage=ffmpeg-20200311-36aaee2-win32-shared.zip
	set ffmpegMD5="bc9eae5466ca033e54588d7c25fe3ea9"
	
	set libboostDown="https://excellmedia.dl.sourceforge.net/project/boost/boost-binaries/1.68.0/boost_1_68_0-msvc-12.0-32.exe"
	set libboostPackage="boost_1_68_0-msvc-12.0-32.exe"
	set libboostPackageCopy="c:\local\boost_1_68_0\lib32-msvc-12.0\boost_python27-vc120-mt-x32-1_68.dll"
	set libboostMD5="d5d5ee205c87078245eb7df72789f407"
	
	set libh264=..\..\h264decoder\windows\x86
	
	set vs2013depend="https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe"
	set vs2013package=vcredist_x86.exe
	set vs2013MD5="0fc525b6b7b96a87523daa7a0013c69d"
)

goto :eof

::-----------------Ceci est la zone de définition de la fonction h264------------------
:h264install
cd h264decoder
if exist build (
	rd /s /q build 
	mkdir build
) else (
	mkdir build
)
cd build
cmake ..
make
goto :eof

::-----------------Voici la zone de définition de la fonction de téléchargement------------------
:down
echo Source:      "%~1"
echo Destination: "%~f2"
echo Start downloading "%~2"...
cscript -nologo -e:jscript "%~f0" "download" "%~1" "%~2"
::echo Download "%~2" OK!
echo ------------------------------------------------------
goto :eof

::-----------------La zone de définition de la fonction de décompression est la suivante------------------
:unpack
echo Source:      "%~f1"
echo Destination: "%~f2"
echo Start unpacking "%~1"...
cscript -nologo -e:jscript "%~f0" "unpack" "%~1" "%~2" "%~dp0"
echo Unpack "%~1" OK!
echo ------------------------------------------------------
goto :eof
::-----------------Voici la zone de définition de la fonction d'installation-----------------
:installmsiPackage
echo Source:      "%~f1"
echo Strat installing "%~f1"...
msiexec /i "%~f1" /passive
echo install "%~1" OK!
echo ------------------------------------------------------
goto :eof
*/

function download(DownSource, DownDestination)
{
	var DownPost
	,DownGet;
	 
	DownDestination=DownDestination.toLowerCase();
	DownSource=DownSource.toLowerCase();
	//DownPost = new ActiveXObject("Msxml2"+String.fromCharCode(0x2e)+"ServerXMLHTTP");
	//DownPost = new ActiveXObject("Microsoft"+String.fromCharCode(0x2e)+"XMLHTTP");
	//DownPost.setOption(2, 13056);
	var DownPost=null; 
	try{ 
		DownPost=new XMLHttpRequest(); 
	}catch(e){ 
		try{ 
			DownPost=new ActiveXObject("Msxml2.XMLHTTP"); 
			DownPost.setOption(2, 13056);
		}catch(ex){ 
			try{ 
				DownPost=new ActiveXObject("Microsoft.XMLHTTP"); 
			}catch(e3){ 
				DownPost=null; 
			} 
		} 
	} 
	DownPost.open("GET",DownSource,0);
	DownPost.send();
	DownGet = new ActiveXObject("ADODB"+String.fromCharCode(0x2e)+"Stream");
	DownGet.Mode = 3;
	DownGet.Type = 1; 
	DownGet.Open(); 
	DownGet.Write(DownPost.responseBody);
	DownGet.SaveToFile(DownDestination,2); 
}

function unpack(PackedFileSource, UnpackFileDestination, ParentFolder)
{
	var FileSysObject = new Object
	,ShellObject = new ActiveXObject("Shell.Application")
	,intOptions = 4 + 16
	,DestinationObj
	,SourceObj;
	
	if (!UnpackFileDestination) UnpackFileDestination = '.';
	var FolderTest = ShellObject.NameSpace(ParentFolder + UnpackFileDestination);
	FileSysObject = ShellObject.NameSpace(ParentFolder);
	while (!FolderTest) 
	{
		WSH.Echo ('Unpack Destination Folder Not Exist, Creating...');
		FileSysObject.NewFolder(UnpackFileDestination);
		FolderTest = ShellObject.NameSpace(ParentFolder + UnpackFileDestination);
		if (FolderTest) 
		WSH.Echo('Unpack Destination Folder Created.');
	}
	DestinationObj = ShellObject.NameSpace(ParentFolder + UnpackFileDestination); 
	SourceObj = ShellObject.NameSpace(ParentFolder + PackedFileSource);
    for (var i = 0; i < SourceObj.Items().Count; i++) 
	{
		try {
			if (SourceObj) {
				WSH.Echo('Unpacking ' + SourceObj.Items().Item(i) + '... ');
				DestinationObj.CopyHere(SourceObj.Items().Item(i), intOptions);
				WSH.Echo('Unpack ' + SourceObj.Items().Item(i) + ' Done.');
			}
		}
		catch(e) {
			WSH.Echo('Failed: ' + e);
		}
	}
}

switch (WScript.Arguments(0)){
	case "download":
		download(WScript.Arguments(1), WScript.Arguments(2));
		break;
	case "unpack":
		unpack(WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3));
		break;
	default:
}

** Cependant, ne démarrez pas encore l'installation avec ce fichier bat. </ font> ** Dans la plupart des cas, cela ne fonctionne pas.

Il est prudent de télécharger manuellement les bibliothèques dépendantes spécifiées dans le fichier bat et de les placer dans le même dossier.

Téléchargez les fichiers requis

Téléchargez le fichier suivant et placez-le dans le dossier ci-dessus.

Pour Windows 64 bits:

https://www.python.org/ftp/python/2.7.17/python-2.7.17.amd64.msi

https://bootstrap.pypa.io/get-pip.py Faites un clic droit sur get-pip.py et utilisez [Enregistrer sous].

https://ffmpeg.zeranoe.com/builds/win64/shared/ffmpeg-20200311-36aaee2-win64-shared.zip

https://nchc.dl.sourceforge.net/project/boost/boost-binaries/1.68.0/boost_1_68_0-msvc-12.0-64.exe Le sourceforge ne peut pas être téléchargé en cliquant avec le bouton droit sur [Enregistrer sous], cliquez donc sur le lien pour ouvrir la page.

https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

Pour Windows 32 bits:

https://www.python.org/ftp/python/2.7.17/python-2.7.17.msi

https://bootstrap.pypa.io/get-pip.py" Faites un clic droit sur get-pip.py et utilisez [Enregistrer sous].

https://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-20200311-36aaee2-win32-shared.zip

https://excellmedia.dl.sourceforge.net/project/boost/boost-binaries/1.68.0/boost_1_68_0-msvc-12.0-32.exe Le sourceforge ne peut pas être téléchargé en cliquant avec le bouton droit sur [Enregistrer sous], cliquez donc sur le lien pour ouvrir la page.

https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe

En téléchargeant manuellement ces fichiers, vous pouvez éviter les erreurs d'exécution dans le fichier bat.

Exécution du fichier BAT

Cela devrait ressembler à ceci dans le dossier où tous les fichiers ont été téléchargés. (Pour 64 bits)

tello_video_folder.png

Ensuite, double-cliquez sur ʻinstall_new2020Mar12.bat` pour démarrer l'installation.

  1. Installez Python
  2. Installez pip
  3. Installez les bottes
  4. Installez ffmpeg
  5. Installez Microsoft Runtime
  6. installation de pip de numpy, matplotlib, opencv-python, oreiller
  7. Copie de dll

Se fait automatiquement.

Si l'installation réussit, l'écran d'invite de commande s'affiche comme indiqué ci-dessous. tello_video_install.png

** Si l'invite de commande se ferme en un instant, cela a échoué car le code de caractère n'est pas Shift-JIS. </ font> **

Une fois l'installation terminée, ** redémarrez votre PC **. Une variable d'environnement a été ajoutée, elle devrait donc être activée.

Réinstallation manuelle de Python

Lorsque l'installation est terminée avec le fichier BAT, à l'invite de commande

python


>nom du module d'installation pip

Même si vous tapez, ce sera "Aucun fichier".

Ensuite, double-cliquez sur python-2.7.17.amd64.msi (pour 64 bits) pour démarrer le programme d'installation.

Comme le montre la figure ci-dessous, activez "Ajouter python.exe au chemin" et réinstallez. re_python.png

Exécutez Tello_Video

Pour exécuter "Tello_Video", à l'invite de commande

python


> python main.py

Vous pouvez taper, mais Une partie pratique de Windows est [Execute Association]. Double-cliquez sur main.py comme indiqué dans la figure ci-dessous pour exécuter le programme. tello_video_main.png

L'écran d'exécution apparaîtra comme ceci. Les détails sont expliqués dans Exécution de l'exemple Tello-Python "Tello_Video". tello_video_window.png

en conclusion

Les préférences Windows sont vraiment "gênantes" (> _ <

Recommended Posts