提交 5fb095f4 编写于 作者: G gineshidalgo99

Windows & Ubuntu versions merged

上级 c652ab8b
......@@ -69,9 +69,9 @@ MANIFEST-*
######################### Windows (Visual Studio) Folders #########################
*.vs/
*x64/
3rdparty/caffe/dependencies/
3rdparty/caffe/include/
3rdparty/lib/
3rdparty/windows/caffe/
3rdparty/windows/caffe3rdparty/
3rdparty/windows/opencv/
# Allowing this file (removed *.user for Qt)
!*.vcxproj.user
......
Caffe:
- Version 1.0.0, extracted from GitHub on 05/09/2017 from the current master branch.
- Link: https://github.com/BVLC/caffe
Unix:
- Caffe:
- Version 1.0.0, extracted from GitHub on 05/09/2017 from the current master branch.
- Link: https://github.com/BVLC/caffe
Windows:
- Caffe & Caffe dependencies (caffe3rdparty):
- Version 1.0.0, extracted from GitHub on 14/05/2017 from the current master branch.
- Link: https://github.com/BVLC/caffe/tree/windows
- OpenCV:
- Version 3.1.0, extracted from their oficial website, section releases/3.1.0/Win pack
- Link: http://opencv.org/releases.html
- Unzip:
- Version 5.52
- Link: http://stahlworks.com/dev/?tool=zipunzip
- Wget:
- Version wget-1.19.1-win64.
- Link: https://eternallybored.org/misc/wget/
......@@ -66,9 +66,9 @@ echo ""
echo "------------------------- Compiling Caffe -------------------------"
if [[ $ubuntu_le_14 == true ]]; then
cp Makefile.config.Ubuntu14.example Makefile.config
cp Makefile.config.Ubuntu14_cuda8.example Makefile.config
else
cp Makefile.config.Ubuntu16.example Makefile.config
cp Makefile.config.Ubuntu16_cuda8.example Makefile.config
fi
# make all -j$NUM_CORES
make all -j$NUM_CORES && make distribute -j$NUM_CORES
......
:: Avoid printing all the comments in the Windows cmd
@echo off
SET UNZIP_EXE=unzip\unzip.exe
SET WGET_EXE=wget\wget.exe
:: Download temporary zip
echo ----- Downloading Caffe -----
SET CAFEE_FOLDER=caffe\
SET ZIP_NAME=caffe_and_dependencies_100.zip
SET ZIP_FULL_PATH=%CAFEE_FOLDER%%ZIP_NAME%
%WGET_EXE% -c http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/%ZIP_NAME% -P %CAFEE_FOLDER%
echo:
echo ----- Unzipping Caffe -----
%UNZIP_EXE% %ZIP_FULL_PATH%
echo:
echo ----- Deleting Temporary Zip File %ZIP_FULL_PATH% -----
del "%ZIP_FULL_PATH%"
echo ----- Caffe Downloaded and Unzipped -----
:: Avoid printing all the comments in the Windows cmd
@echo off
SET UNZIP_EXE=unzip\unzip.exe
SET WGET_EXE=wget\wget.exe
:: Download temporary zip
echo ----- Downloading OpenCV -----
SET OPENCV_FOLDER=opencv\
SET ZIP_NAME=opencv_310.zip
SET ZIP_FULL_PATH=%OPENCV_FOLDER%%ZIP_NAME%
%WGET_EXE% -c http://posefs1.perception.cs.cmu.edu/OpenPose/3rdparty/windows/%ZIP_NAME% -P %OPENCV_FOLDER%
echo:
echo ----- Unzipping OpenCV -----
%UNZIP_EXE% %ZIP_FULL_PATH%
echo:
echo ----- Deleting Temporary Zip File %ZIP_FULL_PATH% -----
del "%ZIP_FULL_PATH%"
echo ----- OpenCV Downloaded and Unzipped -----
http://www.info-zip.org/license.html
此差异已折叠。
Version wget-1.19.1-win64 from:
- https://eternallybored.org/misc/wget/
此差异已折叠。
###
### Sample Wget initialization file .wgetrc
###
## You can use this file to change the default behaviour of wget or to
## avoid having to type many many command-line options. This file does
## not contain a comprehensive list of commands -- look at the manual
## to find out what you can put into this file. You can find this here:
## $ info wget.info 'Startup File'
## Or online here:
## https://www.gnu.org/software/wget/manual/wget.html#Startup-File
##
## Wget initialization file can reside in /usr/local/etc/wgetrc
## (global, for all users) or $HOME/.wgetrc (for a single user).
##
## To use the settings in this file, you will have to uncomment them,
## as well as change them, in most cases, as the values on the
## commented-out lines are the default values (e.g. "off").
##
## Command are case-, underscore- and minus-insensitive.
## For example ftp_proxy, ftp-proxy and ftpproxy are the same.
##
## Global settings (useful for setting up in /usr/local/etc/wgetrc).
## Think well before you change them, since they may reduce wget's
## functionality, and make it behave contrary to the documentation:
##
# You can set retrieve quota for beginners by specifying a value
# optionally followed by 'K' (kilobytes) or 'M' (megabytes). The
# default quota is unlimited.
#quota = inf
# You can lower (or raise) the default number of retries when
# downloading a file (default is 20).
#tries = 20
# Lowering the maximum depth of the recursive retrieval is handy to
# prevent newbies from going too "deep" when they unwittingly start
# the recursive retrieval. The default is 5.
#reclevel = 5
# By default Wget uses "passive FTP" transfer where the client
# initiates the data connection to the server rather than the other
# way around. That is required on systems behind NAT where the client
# computer cannot be easily reached from the Internet. However, some
# firewalls software explicitly supports active FTP and in fact has
# problems supporting passive transfer. If you are in such
# environment, use "passive_ftp = off" to revert to active FTP.
#passive_ftp = off
# The "wait" command below makes Wget wait between every connection.
# If, instead, you want Wget to wait only between retries of failed
# downloads, set waitretry to maximum number of seconds to wait (Wget
# will use "linear backoff", waiting 1 second after the first failure
# on a file, 2 seconds after the second failure, etc. up to this max).
#waitretry = 10
##
## Local settings (for a user to set in his $HOME/.wgetrc). It is
## *highly* undesirable to put these settings in the global file, since
## they are potentially dangerous to "normal" users.
##
## Even when setting up your own ~/.wgetrc, you should know what you
## are doing before doing so.
##
# Set this to on to use timestamping by default:
#timestamping = off
# It is a good idea to make Wget send your email address in a `From:'
# header with your request (so that server administrators can contact
# you in case of errors). Wget does *not* send `From:' by default.
#header = From: Your Name <username@site.domain>
# You can set up other headers, like Accept-Language. Accept-Language
# is *not* sent by default.
#header = Accept-Language: en
# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
#https_proxy = http://proxy.yoyodyne.com:18023/
#http_proxy = http://proxy.yoyodyne.com:18023/
#ftp_proxy = http://proxy.yoyodyne.com:18023/
# If you do not want to use proxy at all, set this to off.
#use_proxy = on
# You can customize the retrieval outlook. Valid options are default,
# binary, mega and micro.
#dot_style = default
# Setting this to off makes Wget not download /robots.txt. Be sure to
# know *exactly* what /robots.txt is and how it is used before changing
# the default!
#robots = on
# It can be useful to make Wget wait between connections. Set this to
# the number of seconds you want Wget to wait.
#wait = 0
# You can force creating directory structure, even if a single is being
# retrieved, by setting this to on.
#dirstruct = off
# You can turn on recursive retrieving by default (don't do this if
# you are not sure you know what it means) by setting this to on.
#recursive = off
# To always back up file X as X.orig before converting its links (due
# to -k / --convert-links / convert_links = on having been specified),
# set this variable to on:
#backup_converted = off
# To have Wget follow FTP links from HTML files by default, set this
# to on:
#follow_ftp = off
# To try ipv6 addresses first:
#prefer-family = IPv6
# Set default IRI support state
#iri = off
# Force the default system encoding
#localencoding = UTF-8
# Force the default remote server encoding
#remoteencoding = UTF-8
# Turn on to prevent following non-HTTPS links when in recursive mode
#httpsonly = off
# Tune HTTPS security (auto, SSLv2, SSLv3, TLSv1, PFS)
#secureprotocol = auto
......@@ -32,8 +32,7 @@ Note: These requirements assume the default configuration (i.e. `--net_resolutio
3. Atlas can be installed with `sudo apt-get install libatlas-base-dev`. Instead of Atlas, you can use OpenBLAS or Intel MKL by modifying the line `BLAS := atlas` in the same way as previosuly mentioned for the OpenCV version selection.
2. Build Caffe & the OpenPose library + download the required Caffe models for Ubuntu 14.04 or 16.04 (auto-detected for the script) and CUDA 8:
```
chmod u+x install_caffe_and_openpose.sh
./install_caffe_and_openpose.sh
bash ./ubuntu/install_caffe_and_openpose_if_cuda8.sh
```
......@@ -46,35 +45,34 @@ Alternatively to the script installation, if you want to use CUDA 7, avoid using
### Install Caffe ###
cd 3rdparty/caffe/
# Select your desired Makefile file (run only one of the next 4 commands)
cp Makefile.config.Ubuntu14_cuda_7.example Makefile.config # Ubuntu 14, cuda 7
cp Makefile.config.Ubuntu14.example Makefile.config # Ubuntu 14, cuda 8
cp Makefile.config.Ubuntu16_cuda_7.example Makefile.config # Ubuntu 16, cuda 7
cp Makefile.config.Ubuntu16.example Makefile.config # Ubuntu 16, cuda 8
cp Makefile.config.Ubuntu14_cuda7.example Makefile.config # Ubuntu 14, cuda 7
cp Makefile.config.Ubuntu14_cuda8.example Makefile.config # Ubuntu 14, cuda 8
cp Makefile.config.Ubuntu16_cuda7.example Makefile.config # Ubuntu 16, cuda 7
cp Makefile.config.Ubuntu16_cuda8.example Makefile.config # Ubuntu 16, cuda 8
# Change any custom flag from the resulting Makefile.config (e.g. OpenCV 3, Atlas/OpenBLAS/MKL, etc.)
# Compile Caffe
make all -j${number_of_cpus} && make distribute -j${number_of_cpus}
### Install OpenPose ###
cd ../../models/
./getModels.sh # It just downloads the Caffe trained models
bash ./getModels.sh # It just downloads the Caffe trained models
cd ..
# Same file cp command as the one used for Caffe
cp Makefile.config.Ubuntu14_cuda_7.example Makefile.config
cp ubuntu/Makefile.config.Ubuntu14_cuda7.example Makefile.config
# Change any custom flag from the resulting Makefile.config (e.g. OpenCV 3, Atlas/OpenBLAS/MKL, etc.)
make all -j${number_of_cpus}
```
NOTE: If you want to use your own Caffe distribution, follow the steps on `Custom Caffe` section and later re-compile the OpenPose library:
```
chmod u+x install_openpose.sh
./install_openpose.sh
bash ./install_openpose_if_cuda8.sh
```
Note: These steps only need to be performed once. If you are interested in making changes to the OpenPose library, you can simply recompile it with:
```
make clean
make all -j$(NUM_CORES)
```
**Highly important**: There are 2 `Makefile.config.Ubuntu##.example` analogous files, one in the main folder and one in [3rdparty/caffe/](../3rdparty/caffe/), corresponding to OpenPose and Caffe configuration files respectively. Any change must be done to both files (e.g. OpenCV 3 flag, Atlab/OpenBLAS/MKL flag, etc.). E.g. for CUDA 8 and Ubuntu16: [3rdparty/caffe/Makefile.config.Ubuntu16.example](../3rdparty/caffe/Makefile.config.Ubuntu16.example) and [Makefile.config.Ubuntu16.example](../Makefile.config.Ubuntu16.example).
**Highly important**: There are 2 `Makefile.config.Ubuntu##.example` analogous files, one in the main folder and one in [3rdparty/caffe/](../3rdparty/caffe/), corresponding to OpenPose and Caffe configuration files respectively. Any change must be done to both files (e.g. OpenCV 3 flag, Atlab/OpenBLAS/MKL flag, etc.). E.g. for CUDA 8 and Ubuntu16: [3rdparty/caffe/Makefile.config.Ubuntu16_cuda8.example](../3rdparty/caffe/Makefile.config.Ubuntu16.example) and [ubuntu/Makefile.config.Ubuntu16_cuda8.example](../ubuntu/Makefile.config.Ubuntu16_cuda8.example).
......@@ -101,9 +99,41 @@ You just need to remove the OpenPose folder, by default called `openpose/`. E.g.
1. [Microsoft Visual C++ 2015 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=53587) (lighter) or Microsoft Visual Studio 2015 (in case you intend to install the library).
2. [CUDA 8](https://developer.nvidia.com/cuda-downloads): Install it on the default location, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0. Otherwise, modify the Visual Studio project solution accordingly.
3. [cuDNN 5.1](https://developer.nvidia.com/cudnn): Once you have downloaded it, just unzip it and copy (merge) the contents on the CUDA folder, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0.
2. Download the portable demo from: [posefs1.perception.cs.cmu.edu/OpenPose/openpose_1.0.0rc2.zip](http://posefs1.perception.cs.cmu.edu/OpenPose/openpose_1.0.0rc2.zip).
2. Download the portable demo from: _link coming soon_.
### Installation - Library
1. Install the pre-requisites:
1. Microsoft Visual Studio (VS) 2015. Install CUDA 8.0 after Visual Studio 2015 is installed to assure that the CUDA installation will generate all necessary files for VS. If CUDA was already installed, re-install it after installing VS!
2. Install all the demo pre-requisites.
3. [Python 2.4.13 64 bits - Windows x86-64 MSI installer](https://www.python.org/downloads/release/python-2713/).
- Install it on C:\Python27 (default) or D:\Programs\Python27. Otherwise, modify the VS solution accordingly.
- In addition, open the Windows cmd (Windows button + X, then A), and install some Python libraries with this command: `pip install numpy protobuf hypothesis`.
4. [Cmake](https://cmake.org/download/): Select the option to add it to the Windows PATH.
5. [Ninja](https://ninja-build.org/): Select the option to add it to the Windows PATH.
2. Download the OpenPose dependencies and models (body, face and hand models):
1. Open the Windows cmd (Windows button + X, then A).
2. Go to the OpenPose directory, assuming OpenPose has been downloaded on `C:\openpose`: `cd C:\openpose\`.
3. Run `windows\download_3rdparty_and_models.bat`.
3. You can now open the Visual Studio sln file located on `{openpose_path}\windows\OpenPose.sln`.
4. In order to verify OpenPose is working, try compiling and executing the demo:
1. Right click on `OpenPoseDemo` --> `Set as StartUp Project`.
2. Change `Debug` by `Release` mode.
3. You can now compile it.
5. If you have a webcam connected, you can test it by pressing the F5 key or the green play icon.
6. Otherwise, check [Quick Start](#quick-start) to verify OpenPose was properly compiled. In order to use the created exe from the command line, you have to:
1. Copy all the DLLs located on `{openpose_folder}\3rdparty\windows\caffe\bin\` on the exe folder: `{openpose_folder}\windows_project\x64\Release`.
2. Copy all the DLLs located on `{openpose_folder}\3rdparty\windows\opencv\x64\vc14\bin\` on the exe folder: `{openpose_folder}\windows_project\x64\Release`.
3. Open the Windows cmd (Windows button + X, then A).
4. Go to the OpenPose directory, assuming OpenPose has been downloaded on `C:\openpose`: `cd C:\openpose\`.
5. Run the tutorial commands.
### Installation - Library - Deprecated Old Version
Note: This version will not be updated anymore and removed in the future.
1. Install the pre-requisites:
1. Microsoft Visual Studio (VS) 2015. Install CUDA 8.0 after Visual Studio 2015 is installed to assure that the CUDA installation will generate all necessary files for VS. If CUDA was already installed, re-install it after installing VS!
2. Install all the demo pre-requisites.
......
:: Avoid printing all the comments in the Windows cmd
@echo off
echo ------------------------- BODY, FACE AND HAND MODELS -------------------------
echo ----- Downloading body pose (COCO and MPI), face and hand models -----
SET WGET_EXE=..\3rdparty\windows\wget\wget.exe
SET OPENPOSE_URL=http://posefs1.perception.cs.cmu.edu/OpenPose/models/
SET POSE_FOLDER=pose/
SET FACE_FOLDER=face/
echo:
echo ------------------------- POSE MODELS -------------------------
echo Body (COCO)
SET COCO_FOLDER=%POSE_FOLDER%coco/
SET COCO_MODEL=%COCO_FOLDER%pose_iter_440000.caffemodel
%WGET_EXE% -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/%COCO_MODEL% -P %COCO_FOLDER%
echo:
echo Body (MPI)
SET MPI_FOLDER=%POSE_FOLDER%mpi/
SET MPI_MODEL=%MPI_FOLDER%pose_iter_160000.caffemodel
%WGET_EXE% -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/%MPI_MODEL% -P %MPI_FOLDER%
echo ----------------------- POSE DOWNLOADED -----------------------
echo:
echo ------------------------- FACE MODELS -------------------------
echo Face
SET FACE_MODEL=%FACE_FOLDER%pose_iter_116000.caffemodel
%WGET_EXE% -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/%FACE_MODEL% -P %FACE_FOLDER%
echo ----------------------- FACE DOWNLOADED -----------------------
# "------------------------- POSE MODELS -------------------------"
# Downloading body pose (COCO and MPI) as well as face models
pose_folder="pose/"
face_folder="face/"
# ------------------------- BODY, FACE AND HAND MODELS -------------------------
# Downloading body pose (COCO and MPI), face and hand models
OPENPOSE_URL="http://posefs1.perception.cs.cmu.edu/OpenPose/models/"
POSE_FOLDER="pose/"
FACE_FOLDER="face/"
# ------------------------- POSE MODELS -------------------------
# Body (COCO)
coco_folder="$pose_folder"coco/""
coco_model="$coco_folder"pose_iter_440000.caffemodel""
wget -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/$coco_model -P $coco_folder
COCO_FOLDER=${POSE_FOLDER}"coco/"
COCO_MODEL=${COCO_FOLDER}"pose_iter_440000.caffemodel"
wget -c ${OPENPOSE_URL}${COCO_MODEL} -P ${COCO_FOLDER}
# Alternative: it will not check whether file was fully downloaded
# if [ ! -f $COCO_MODEL ]; then
# wget ${OPENPOSE_URL}$COCO_MODEL -P $COCO_FOLDER
# fi
# Body (MPI)
mpi_folder="$pose_folder"mpi/""
mpi_model="$mpi_folder"pose_iter_160000.caffemodel""
wget -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/$mpi_model -P $mpi_folder
MPI_FOLDER=${POSE_FOLDER}"mpi/"
MPI_MODEL=${MPI_FOLDER}"pose_iter_160000.caffemodel"
wget -c ${OPENPOSE_URL}${MPI_MODEL} -P ${MPI_FOLDER}
# "------------------------- FACE MODELS -------------------------"
# Face
face_model="$face_folder"pose_iter_116000.caffemodel""
wget -c http://posefs1.perception.cs.cmu.edu/OpenPose/models/$face_model -P $face_folder
FACE_MODEL=${FACE_FOLDER}"pose_iter_116000.caffemodel"
wget -c ${OPENPOSE_URL}${FACE_MODEL} -P ${FACE_FOLDER}
......@@ -35,12 +35,12 @@ function executeShInItsFolder {
executeShInItsFolder "install_caffe.sh" "./3rdparty/caffe" "../.."
executeShInItsFolder "install_caffe_if_cuda8.sh" "./3rdparty/caffe" "../.."
exitIfError
executeShInItsFolder "install_openpose.sh" "./" "./"
executeShInItsFolder "./ubuntu/install_openpose_if_cuda8.sh" "./" "./"
exitIfError
......
......@@ -63,9 +63,9 @@ echo ""
echo "------------------------- Compiling OpenPose -------------------------"
if [[ $ubuntu_le_14 == true ]]; then
cp Makefile.config.Ubuntu14.example Makefile.config
cp ubuntu/Makefile.config.Ubuntu14_cuda8.example Makefile.config
else
cp Makefile.config.Ubuntu16.example Makefile.config
cp ubuntu/Makefile.config.Ubuntu16_cuda8.example Makefile.config
fi
make all -j$NUM_CORES
exitIfError
......

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenPose", "OpenPose\OpenPose.vcxproj", "{1848F100-6EC5-4F60-9748-062590ADFE5C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenPoseDemo", "OpenPoseDemo\OpenPoseDemo.vcxproj", "{DF3983B6-A052-478D-9C59-B353C5F95991}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1_user_asynchronous", "TutorialWrapper\1_user_asynchronous.vcxproj", "{1A72B535-7E9E-4B48-9D54-B90D6FC52616}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenPose library", "OpenPose library", "{A2660049-67B9-4C4A-9E54-3BB659BCF9C0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{322A32B5-4A4E-40B7-9CAA-62573A12BE5E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial", "Tutorial", "{48ECEE85-ED06-42A5-8068-CBDD92BB6EF4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wrapper", "Wrapper", "{BA0F9599-8099-4A7A-99A3-ACFC7C35639C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2_user_synchronous", "TutorialWrapper\2_user_synchronous.vcxproj", "{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pose", "Pose", "{40194B19-A61E-4B91-89CD-A858AC5953A6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Thread", "Thread", "{8F1B1B9F-0117-48CD-B9F6-06E1930640C3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1_openpose_read_and_display", "TutorialThread\1_openpose_read_and_display.vcxproj", "{D28D2569-F7D3-4049-8B49-AF7150943F1F}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2_user_processing_function", "TutorialThread\2_user_processing_function.vcxproj", "{D27AEA08-2345-457A-B1E2-BFA8E3C77222}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3_user_input_processing_and_output", "TutorialThread\3_user_input_processing_and_output.vcxproj", "{44F26037-115D-41E7-97DE-C754844CC5B0}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "4_user_input_processing_output_and_datum", "TutorialThread\4_user_input_processing_output_and_datum.vcxproj", "{4A271F39-C60B-4827-9A64-E0EEDD15D082}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "1_extract_from_image", "TutorialPose\1_extract_from_image.vcxproj", "{DA43DA92-141D-4B91-80CE-8A2C5B377683}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2_extract_pose_or_heatmat_from_image", "TutorialPose\2_extract_pose_or_heatmat_from_image.vcxproj", "{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}"
ProjectSection(ProjectDependencies) = postProject
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {1848F100-6EC5-4F60-9748-062590ADFE5C}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.ActiveCfg = Debug|x64
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x64.Build.0 = Debug|x64
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Debug|x86.ActiveCfg = Debug|x64
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x64.ActiveCfg = Release|x64
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x64.Build.0 = Release|x64
{1848F100-6EC5-4F60-9748-062590ADFE5C}.Release|x86.ActiveCfg = Release|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.ActiveCfg = Debug|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x64.Build.0 = Debug|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Debug|x86.ActiveCfg = Debug|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x64.ActiveCfg = Release|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x64.Build.0 = Release|x64
{DF3983B6-A052-478D-9C59-B353C5F95991}.Release|x86.ActiveCfg = Release|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.ActiveCfg = Debug|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x64.Build.0 = Debug|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Debug|x86.ActiveCfg = Debug|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x64.ActiveCfg = Release|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x64.Build.0 = Release|x64
{1A72B535-7E9E-4B48-9D54-B90D6FC52616}.Release|x86.ActiveCfg = Release|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.ActiveCfg = Debug|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x64.Build.0 = Debug|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Debug|x86.ActiveCfg = Debug|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x64.ActiveCfg = Release|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x64.Build.0 = Release|x64
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A}.Release|x86.ActiveCfg = Release|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.ActiveCfg = Debug|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x64.Build.0 = Debug|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Debug|x86.ActiveCfg = Debug|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x64.ActiveCfg = Release|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x64.Build.0 = Release|x64
{D28D2569-F7D3-4049-8B49-AF7150943F1F}.Release|x86.ActiveCfg = Release|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.ActiveCfg = Debug|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x64.Build.0 = Debug|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Debug|x86.ActiveCfg = Debug|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x64.ActiveCfg = Release|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x64.Build.0 = Release|x64
{D27AEA08-2345-457A-B1E2-BFA8E3C77222}.Release|x86.ActiveCfg = Release|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.ActiveCfg = Debug|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x64.Build.0 = Debug|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Debug|x86.ActiveCfg = Debug|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x64.ActiveCfg = Release|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x64.Build.0 = Release|x64
{44F26037-115D-41E7-97DE-C754844CC5B0}.Release|x86.ActiveCfg = Release|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.ActiveCfg = Debug|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x64.Build.0 = Debug|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Debug|x86.ActiveCfg = Debug|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x64.ActiveCfg = Release|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x64.Build.0 = Release|x64
{4A271F39-C60B-4827-9A64-E0EEDD15D082}.Release|x86.ActiveCfg = Release|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.ActiveCfg = Debug|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x64.Build.0 = Debug|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Debug|x86.ActiveCfg = Debug|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x64.ActiveCfg = Release|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x64.Build.0 = Release|x64
{DA43DA92-141D-4B91-80CE-8A2C5B377683}.Release|x86.ActiveCfg = Release|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.ActiveCfg = Debug|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x64.Build.0 = Debug|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Debug|x86.ActiveCfg = Debug|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x64.ActiveCfg = Release|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x64.Build.0 = Release|x64
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D}.Release|x86.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{1848F100-6EC5-4F60-9748-062590ADFE5C} = {A2660049-67B9-4C4A-9E54-3BB659BCF9C0}
{DF3983B6-A052-478D-9C59-B353C5F95991} = {322A32B5-4A4E-40B7-9CAA-62573A12BE5E}
{1A72B535-7E9E-4B48-9D54-B90D6FC52616} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C}
{48ECEE85-ED06-42A5-8068-CBDD92BB6EF4} = {322A32B5-4A4E-40B7-9CAA-62573A12BE5E}
{BA0F9599-8099-4A7A-99A3-ACFC7C35639C} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4}
{A00A4BDB-C7BC-4DFC-85C4-991FAB45B22A} = {BA0F9599-8099-4A7A-99A3-ACFC7C35639C}
{40194B19-A61E-4B91-89CD-A858AC5953A6} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4}
{8F1B1B9F-0117-48CD-B9F6-06E1930640C3} = {48ECEE85-ED06-42A5-8068-CBDD92BB6EF4}
{D28D2569-F7D3-4049-8B49-AF7150943F1F} = {8F1B1B9F-0117-48CD-B9F6-06E1930640C3}
{D27AEA08-2345-457A-B1E2-BFA8E3C77222} = {8F1B1B9F-0117-48CD-B9F6-06E1930640C3}
{44F26037-115D-41E7-97DE-C754844CC5B0} = {8F1B1B9F-0117-48CD-B9F6-06E1930640C3}
{4A271F39-C60B-4827-9A64-E0EEDD15D082} = {8F1B1B9F-0117-48CD-B9F6-06E1930640C3}
{DA43DA92-141D-4B91-80CE-8A2C5B377683} = {40194B19-A61E-4B91-89CD-A858AC5953A6}
{D1E5B5FC-A447-4BCC-8024-C6B6B8061A7D} = {40194B19-A61E-4B91-89CD-A858AC5953A6}
EndGlobalSection
EndGlobal
此差异已折叠。
此差异已折叠。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{DF3983B6-A052-478D-9C59-B353C5F95991}</ProjectGuid>
<RootNamespace>OpenPoseDemo</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;D:\Programs\Python27\libs;C:\Python27\libs</LibraryPath>
<ExecutablePath>$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath>
<ReferencePath>$(VC_ReferencesPath_x64);</ReferencePath>
<IntDir>$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;D:\Programs\Python27\libs;C:\Python27\libs</LibraryPath>
<IntDir>$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>EnableAllWarnings</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>CAFFE_VERSION=1.0.0;BOOST_ALL_NO_LIB;USE_LMDB;USE_LEVELDB;USE_CUDNN;USE_OPENCV;USE_CAFFE;CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;CMAKE_INTDIR="Debug";-D_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj</ObjectFileName>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\include;..\..\3rdparty\windows\opencv\include;..\..\3rdparty\windows\caffe\include;..\..\3rdparty\windows\caffe\include2;..\..\3rdparty\windows\caffe3rdparty\include;..\..\3rdparty\windows\caffe3rdparty\include\boost-1_61;$(CUDA_PATH_V8_0)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>BOOST_ALL_NO_LIB;CAFFE_VERSION=1.0.0;CMAKE_INTDIR="Release";CMAKE_WINDOWS_BUILD;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=__declspec(dllimport);GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport);H5_BUILT_AS_DYNAMIC_LIB=1;USE_CAFFE;USE_CUDNN;USE_OPENCV;USE_LEVELDB;USE_LMDB;_CRT_SECURE_NO_WARNINGS;-D_SCL_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)\obj\relDir\relDir\%(RelativeDir)\%(Filename)%(Extension).obj</ObjectFileName>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(CUDA_PATH_V8_0)\lib\x64\;$(PYTHON_LIB);</AdditionalLibraryDirectories>
<AdditionalDependencies>..\x64\Release\OpenPose.lib;..\..\3rdparty\windows\caffe\lib\Release\caffe.lib;..\..\3rdparty\windows\caffe\lib\Release\proto.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_atomic-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_chrono-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_date_time-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_filesystem-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_python-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_system-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\boost_thread-vc140-mt-1_61.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5_hl.lib;..\..\3rdparty\windows\caffe3rdparty\lib\caffezlib.lib;..\..\3rdparty\windows\caffe3rdparty\lib\gflags.lib;..\..\3rdparty\windows\caffe3rdparty\lib\glog.lib;..\..\3rdparty\windows\caffe3rdparty\lib\leveldb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\libopenblas.dll.a;..\..\3rdparty\windows\caffe3rdparty\lib\libprotobuf.lib;..\..\3rdparty\windows\caffe3rdparty\lib\lmdb.lib;..\..\3rdparty\windows\caffe3rdparty\lib\snappy.lib;..\..\3rdparty\windows\opencv\x64\vc14\lib\opencv_world310.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas_device.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudart.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudnn.lib;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\curand.lib;ntdll.lib;python27.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\examples\openpose\openpose.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\examples\openpose\openpose.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerEnvironment>PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin</LocalDebuggerEnvironment>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerWorkingDirectory>..\..</LocalDebuggerWorkingDirectory>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerEnvironment>PATH=%PATH%;3rdparty\windows\caffe\bin\;3rdparty\windows\opencv\x64\vc14\bin</LocalDebuggerEnvironment>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerWorkingDirectory>..\..</LocalDebuggerWorkingDirectory>
</PropertyGroup>
</Project>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册