一、项目相关

项目代码网址:GitHub - radekd91/emoca: Official repository accompanying a CVPR 2022 paper EMOCA: Emotion Driven Monocular Face Capture And Animation. EMOCA takes a single image of a face as input and produces a 3D reconstruction. EMOCA sets the new standard on reconstructing highly emotional images in-the-wildhttps://github.com/radekd91/emoca

项目介绍:

此项目是CVPR 2022 论文 EMOCA: Emotion Driven Monoocular Face Capture And Animation 的官方代码 。 EMOCA 将人脸的单个图像作为输入并生成 3D 重建。 EMOCA 设定了在自然场景下重建高度情绪化图像的新标准。EMOCA(EMOtion Capture and Animation)(情绪捕捉和动画)

二、开始复现(Windows系统)

主要以GitHub页面给出的项目说明来操作运行,遇到问题再一个一个解决

第一步 :Dependences(下载一些资源和软件)

  • 下载conda,这里我直接在官网下载了anaconda,里面包含conda和Python以及其他的包,在这之前我已经下载了Python和pycharm,暂不知道两个Python是否会影响后面的操作。第一次下载conda后,在开始菜单没有发现conda这个应用,后面查找教程,原来在安装过程的最后要勾选添加环境变量,卸载重装问题解决。
  • 下载mamba,mamba是用来加速conda的,打开anaconda prompt,输入如下代码完成mamba的安装
    conda install -n base conda-forge::mamba
  • 下载代码,这个直接点击项目github页面上的coda->Download ZIP下载,随后解压在某个文件夹内,这里我放在了D盘新建的emoca文件夹里,路径为D:\emoca\emoca-release-EMOCA,后面会用到这个路径。

第二步:Short Version(短的版本)

  • 首先打开anaconda prompt,此时显示的代码命令行显示的是

    (base) C:\Users\XXX>

    代表的是在这个路径下执行一些操作,而我们的操作要在我们刚刚下载的路径里面执行,故需要改变路径,输入如下代码,cd 后面是我们下载的资源的路径。

    (base) C:\Users\XXX>D:(base) D:\>cd D:\emoca\emoca-release-EMOCA

    之后便可在该路径下操作

    (base) D:\emoca\emoca-release-EMOCA>
  • 按照项目说明,输入如下代码安装脚本
    bash install.sh

    但是此时又出现了错误,找不到bash这个命令,后面查找教程,发现bash貌似是Linux命令,无法直接在Windows系统中使用,需要在命令行输入如下代码,之后问题解决

    conda install m2-base

    继续输入bash install.sh,让脚本开始下载,并构件我们要想的conda environment,名字是

    work36_cu11,但是很不幸,遇到了项目作者提到的无法预料的问题,一片红,部分错误如下
    An unexpected error has occurred. Conda has prepared the above report.Could not find conda environment: work36_cu11
    You can list all discoverable environments with `conda info --envs`.

    查看教程,有个方法是输入如下代码conda clean -i再重启anaconda prompt,然而,操作了一下还是没用,仍然是相同的报错,命令行输入conda info --envs也没有出现想要的环境,因此可能需要尝试项目作者给出的长版本

第三步:Long Version(长版本)

根据作者提示,短版本配置环境失效则用长版本来配置。

  • 使用以下代码拉取相关子模块

    bash pull_submodules.sh

    出现如下错误

    git: command not found

    查找教程,发现出现这种原因是未将git添加到系统变量里,于是加入系统变量后继续输入上面的代码,可以运行起来,但是由于项目文件太大的原因clone不下来,因此根据错误提示,从对应的网站中手动下载相应的文件,再复制到对应的文件夹中,这一步就完成了。

  • 根据项目提示,用以下代码创建一个环境

    mamba env create python=3.6 --file conda-environment_py36_cu11_ubuntu.yml

    经过一段时间的包的下载,又出现了如下错误

    An unexpected error has occurred. Conda has prepared the above report.

    查找解决方案,第一种,清理conda,用代码conda clean -i,然后重启conda,再次创建,未解决问题;第二种,使用代码conda clean --packages && conda clean --all && conda update --all,再重启conda继续创建,问题依然存在;第三种,删除C:\Users[user_name].condarc文件,之后重启conda,继续创建,未解决问题;第四种,关闭VPN,但是我未开启VPN。项目停滞

重新开始

卸载电脑上的python,pycharm,anaconda,删除环境变量,重新开始本项目。

  • 首先安装anaconda,直接用之前下载好的安装包,安装好后在cmd中输入python,有输出,证明安装成功。
  • 之后为conda添加镜像源,直接将以下代码复制到.contract文件中。
channels:- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  • 输入命令conda install m2-base,解决windows不能使用bash命令的问题,执行该代码后又出现如下InvalidArchiveError报错

    InvalidArchiveError("Error with archive C:\\Users\\金兴亮\\.conda\\pkgs\\conda-4.12.0-py39haa95532_0_mw7kqxr\\info-conda-4.12.0-py39haa95532_0.tar.zst.  You probably need to delete and re-download or re-create this file.  Message from libarchive was:\n\nFailed to open 'C:\\Users\\XXX\\.conda\\pkgs\\conda-4.12.0-py39haa95532_0_mw7kqxr\\info-conda-4.12.0-py39haa95532_0.tar.zst'")

    解决方法是修改anaconda文件夹下的user的权限为全控制,之后再运行问题解决

  • 执行命令conda install -n base conda-forge::mamba安装mamba,安装成功。

  • 直接从长版本开始操作,运行bash pull_submodules.sh,提示git:command not found。原因是未下载git,于是通过指令conda install git安装git,并将C:\ProgramData\Anaconda3\Library\cmd路径添加到环境变量里,重新运行bash pull_submodules.sh,运行成功

  • 随后执行mamba env create python=3.6 --file conda-environment_py36_cu11_ubuntu.yml,按照文件创建环境,然而还是出现同样的问题,错误报告如下:

三、开始复现(Linux系统)

安装Ubuntu系统

  • 这里选择双系统安装,便于后续的使用。主要参考link,在磁盘管理中分出200GB空间用于Ubuntu系统,在Windows上面制作启动u盘,首先更改硬盘模式为AHIC,随后关机开机,出现笔记本品牌logo,狂按esc(华硕笔记本),进入安装界面,按照参考博文选择选项,随后在分区那块,分了18G给swap,1G给EFI引导区,剩下的全部分给/,然后在下面的安装启动引导器的设备一栏,选择efi系统分区所对应的设备(EFI分了哪个磁盘就选哪个)。安装完成如下:

  • 随后,按照网上的一个教程添加显卡驱动,运行了一个命令sudo ubuntu-drivers autoinstall,随后重启Ubuntu,发现虽然显卡驱动安装成功,但wifi和蓝牙都用不了了,也无法使用手机USB联网,网上未找到合适的解决方案,无奈只好重装系统。
  • 按照网上给出的重装教程link,要在Windows环境下打开磁盘管理,然后删除Ubuntu对应的磁盘内容,对于EFI区要使用工具清理,否则会造成一些无法进入Windows等的错误。操作完成的磁盘分区

  • 显示又有195GB的未分配空间,随后继续使用该空间安装Ubuntu。安装成功如下:

下载一些资源和软件

在搭建环境之前,还对ubuntu系统进行了一些设置,操作记录在另一篇博文上:link

  • 下载安装cuda
//输入以下命令查看驱动对应的cuda版本
nvidia-smi//进入官网找到对应版本的cuda安装界面,选择自己的版本,再按照提示依次输入以下命令
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.runsudo sh cuda_11.4.0_470.42.01_linux.run//开始安装会弹出窗口,依次点击continue,输入accept,enter取消对驱动的安装,再选择install即开始安装//安装完成后,会有一个Summary提示,这是正确安装的样子,接下来添加环境变量//输入以下指令,打开.bashrc文件
sudo gedit ~/.bashrc//随后在弹出的文件中最后面加上下面的这些代码
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64//save保存,然后输入以下命令,使更改的环境变量生效
source .bashrc//最后验证是否安装成功
nvcc -V//输出了版本信息即安装成功//进一步验证,使用cuda的测试样例
cd /usr/local/cuda-11.4/samples/1_Utilities/deviceQuerysudo makesudo ./deviceQuery//最后输出显示Result=PASS即大功告成
  • 下载anaconda
//进入官网https://www.anaconda.com/products/individual,下载对应的安装包//进入下载文件的目录内,输入以下命令开始安装
bash Anaconda3-2021.11-Linux-x86_64.sh//一路回车加yes完成安装//配置环境变量
sudo gedit ~/.bashrc//添加以下代码
export PATH="/home/kayer/anaconda3/bin:$PATH"//使其生效
source ~/.bashrc
  • 下载mamba
conda install -n base conda-forge::mamba
//安装会卡住,耐心等待
  • 用git下载项目代码,下载完的项目文件在home目录下
//首先安装配置好git,然后输入以下命令git clone https://github.com/radekd91/emoca.git

Short Version

执行bash install.sh,install.sh文件内容如下,观察终端的运行过程

#!/bin/bash
if ! command -v mamba &> /dev/null
thenecho "mamba could not be found. Please install mamba before running this script"exit
fiecho "Pulling submodules"
bash pull_submodules.sh
echo "Creating conda environment"
mamba env create python=3.6 --file conda-environment_py36_cu11_ubuntu.yml
eval "$(conda shell.bash hook)" # make sure conda works in the shell script
conda activate work36_cu11
echo "Installing GDL"
pip install Cython==0.29
pip install -e .
echo "Making sure Pytorch3D installed correctly"
pip install git+https://github.com/facebookresearch/pytorch3d.git@v0.6.0
echo "Installation finished"
  • 首先执行的是bash pull_submodules.sh,拉取一些子模块
    运行成功,在对应的文件夹中发现存在相关内容。
  • 随后是创建环境mamba env create python=3.6 --file conda-environment_py36_cu11_ubuntu.yml
    终端输出如下,说明正在创建环境
TransactionPrefix: /home/paker/anaconda3/envs/work36_cu11

随后提示要下载安装一些文件,等待

  Summary:Install: 193 packagesTotal download: 3 GB

下载过程中有几个包下载了一部分就下不动了,最后就出现了如下错误


CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/anaconda/linux-64/sqlite-3.38.2-hc218d9a_0.tar.bz2>
Elapsed: -An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.CondaError: Downloaded bytes did not match Content-Lengthurl: https://conda.anaconda.org/anaconda/linux-64/numba-0.53.1-py36ha9443f7_0.tar.bz2target_path: /home/paker/anaconda3/pkgs/numba-0.53.1-py36ha9443f7_0.tar.bz2Content-Length: 3858173downloaded bytes: 3126274("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/anaconda/linux-64/libllvm10-10.0.1-hbcb73fb_5.tar.bz2>
Elapsed: -An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.Could not find conda environment: work36_cu11
You can list all discoverable environments with `conda info --envs`.

故重新开始,按照Long Version一步一步搭建环境。

Long Version

因为拉取子模块完成,故直接从创建环境开始

  • 创建环境

    mamba env create python=3.6 --file conda-environment_py36_cu11_ubuntu.yml

    这时候发现要下载的包少了很多,只有40mb,随后也成功下载,成功创建环境

    done
    #
    # To activate this environment, use
    #
    #     $ conda activate work36_cu11
    #
    # To deactivate an active environment, use
    #
    #     $ conda deactivate
    

    输入conda info --envs 有以下输出

    # conda environments:
    #
    base                  *  /home/paker/anaconda3
    work36_cu11              /home/paker/anaconda3/envs/work36_cu11
    
  • 单独安装Cython
    pip install Cython==0.29.14
    

    安装成功。

  • 安装gdl,使用-e选项

    pip install -e .

    下载安装一段时间后,出现了以下报错

    ERROR: Could not find a version that satisfies the requirement pytorch3d (unavailable) (from gdl) (from versions: 0.0.1, 0.1.1, 0.2.0, 0.2.5, 0.3.0)
    ERROR: No matching distribution found for pytorch3d (unavailable)
    

    此时,按照作者指示单独安装pytorch3D

    pip install git+https://github.com/facebookresearch/pytorch3d.git@v0.6.0

    安装成功后,再次安装gdl,又出现如下报错

    ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
    dask 2021.3.1 requires partd>=0.3.10, which is not installed.
    

    告诉我需要安装partd>=0.3.10,于是单独安装以下它

    pip install partd==0.3.10

    成功安装,再次安装gdl,输出结果如下,安装完成

    Installing collected packages: GDLAttempting uninstall: GDLFound existing installation: GDL 0.0.2Uninstalling GDL-0.0.2:Successfully uninstalled GDL-0.0.2Running setup.py develop for GDL
    Successfully installed GDL-0.0.2

至此,环境成功搭建。

开始运行

根据readme里面的指示进入不同的页面运行不同的项目

运行EMOCA示例

进入EMOCA页面,按照readme操作

  • 首先下载资源

    cd emoca/gdl_apps/EMOCA/demosbash download_assets.sh

    资源下载需要一定时间

  • 激活环境

    conda activate work36_cu11
  • 单一图像

    python demos/test_emoca_on_images.py

    运行这个命令来测试EMOCA的一些例子,出现如下错误

    Traceback (most recent call last):File "demos/test_emoca_on_images.py", line 21, in <module>from gdl_apps.EMOCA.utils.load import load_modelFile "/home/paker/emoca/gdl_apps/EMOCA/utils/load.py", line 6, in <module>from gdl.models.DECA import DecaModuleFile "/home/paker/emoca/gdl/models/DECA.py", line 29, in <module>from pytorch_lightning import LightningModuleFile "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/pytorch_lightning/__init__.py", line 20, in <module>from pytorch_lightning import metrics  # noqa: E402File "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/pytorch_lightning/metrics/__init__.py", line 15, in <module>from pytorch_lightning.metrics.classification import (  # noqa: F401File "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/pytorch_lightning/metrics/classification/__init__.py", line 14, in <module>from pytorch_lightning.metrics.classification.accuracy import Accuracy  # noqa: F401File "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/pytorch_lightning/metrics/classification/accuracy.py", line 18, in <module>from pytorch_lightning.metrics.utils import deprecated_metrics, voidFile "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/pytorch_lightning/metrics/utils.py", line 22, in <module>from torchmetrics.utilities.data import get_num_classes as _get_num_classes
    ImportError: cannot import name 'get_num_classes'
    

    网上搜索发现是torchmetrics版本问题,原来的版本是0.8,要改成0.5才行,输入以下命令完成更改

    conda uninstall torchmetricspip install torchmetrics==0.5.1

    继续执行代码python demos/test_emoca_on_images.py,就没有报这个错误了,但是又有一个新的错误如下

    Traceback (most recent call last):File "demos/test_emoca_on_images.py", line 21, in <module>from gdl_apps.EMOCA.utils.load import load_modelFile "/home/paker/emoca/gdl_apps/EMOCA/utils/load.py", line 6, in <module>from gdl.models.DECA import DecaModuleFile "/home/paker/emoca/gdl/models/DECA.py", line 25, in <module>import torchFile "/home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/torch/__init__.py", line 197, in <module>from torch._C import *  # noqa: F403
    ImportError: /home/paker/anaconda3/envs/work36_cu11/lib/python3.6/site-packages/torch/lib/libtorch_python.so: undefined symbol: PySlice_Unpack

    网上搜索发现是python的版本3.6.0与pytorch不匹配,要将python升级为3.6.2,操作如下

    conda install python=3.6.2
    

    随后继续执行刚才的命令python demos/test_emoca_on_images.py,随后就开始下载一些东西,一些.ph文件,之后有一个运行进度条,最后全部运行完成

    100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 554/554 [07:41<00:00,  1.20it/s]
    Done
    (work36_cu11) paker@paker-TUF-Gaming-FX505GE-FX86FE:~/emoca/gdl_apps/EMOCA$
    

    上述例子保存在/emoca/gdl_apps/EMOCA/image_output文件夹内

    一个例子:

    接着运行下自己找的照片

    python demos/test_emoca_on_images.py --input_folder "/home/paker/Downloads/image_input" --output_folder "/home/paker/Downloads/image_output" --model_name EMOCA

    结果如下

  • 视频
    python demos/test_emoca_on_video.py --input_video "/home/paker/Downloads/video_input/video_test.mp4" --output_folder "/home/paker/Downloads/video_output" --model_name EMOCA

    使用这个命令完成对视频中人脸的3D重建,结果如下

运行情绪检测

先按照情绪检测项目提示,下载一些assets,随后输入以下命令运行情绪检测

python demos/test_emotion_recognition_on_images.py --input_folder "/home/paker/Downloads/image_input" --output_folder "/home/paker/Downloads/image_output"  --modeltype 3dmm --model_name EMOCA-emorec

随后出现以下问题

FileNotFoundError: [Errno 2] No such file or directory: '/is/cluster/work/rdanecek/emoca/finetune_deca/2021_11_09_19-05-01_5101174495546322475_ExpDECA_Affec_clone_NoRing_EmoB_F2_DeSegrend_BlackB_Aug_early/detail/checkpoints/last.ckpt'

暂未解决。。。

四、一些常用指令

  • conda

    conda update -n base conda        #update最新版本的conda
    conda create -n xxxx python=3.5   #创建python3.5的xxxx虚拟环境
    conda activate xxxx               #开启xxxx环境
    conda deactivate                  #关闭环境
    conda info --envs                 #显示所有的虚拟环境
    conda clean -i                    #清理
    cd xxx                            #转到xxx路径里去

论文项目复现笔记----Emotion Driven Monocular Face Capture and Animation相关推荐

  1. VIBE:3D人体姿态预测项目复现笔记

    VIBE是一个的3D人体姿态预测开源项目,需要基于该项目作一些开发,首先需要能够搭建和是的环境成功复现它. 不过,这个项目的复现的,真的不是一星半点的艰难. 1.系统选择 之前一直用的Windows, ...

  2. CNN基础论文 精读+复现----VGG(一)

    文章目录 前言 第1页 第2-3页 第四页 第五页 前言 原文Github地址:https://github.com/shitbro6/paper/blob/main/VGG.pdf 原文arxiv地 ...

  3. 论文无法复现「真公开处刑」,PapersWithCode上线「论文复现报告」

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 近日,机器学习资源网站 Pap ...

  4. image generation from scene graphs 论文+code复现总结

    image generation from scene graphs 论文+code复现总结 abstraction 传统方法在一些限制好的领域像鸟或花,这些方法都还不错,但是在如实地分解复杂的段落为 ...

  5. WideDeep Model、Wide Model(LR)、Deep Model、DeepFm Model、NFM Model复现笔记

    声明:本模型复现笔记记录自己学习过程,如果有错误请各位老师批评指正. 本周复现了Wide&Deep Model.Wide Model.Deep Model.DeepFm Model.NFM M ...

  6. 目标检测论文解读复现之一:基于改进YOLOv5的整车原木数量检测方法——TWD-YOLOv5(代码已复现)

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应用于什么场景, ...

  7. VQA- 近五年视觉问答顶会论文创新点笔记

    转载自VQA - 近五年视觉问答顶会论文创新点笔记 简要梳理近五年顶级会议发表的视觉问答(Visual Question Answering, VQA)相关论文的创新点.选取自NIPS.CVPR.IC ...

  8. 论文代码复现常见问题

    论文代码复现常见问题 场景1:代码太慢 1:写出基础代码 使用少量数据集来实践你的思路,代码可以不用很优化,优先写出来即可.写完后建议封装为函数,方便调用. 2:优化代码逻辑 代码本身足够高效吗? 代 ...

  9. 禅道linux一键安装漏洞,禅道全版本rce漏洞复现笔记

    禅道全版本rce漏洞复现笔记 漏洞说明 禅道项目管理软件是一款国产的,基于LGPL协议,开源免费的项目管理软件,它集产品管理.项目管理.测试管理于一体,同时还包含了事务管理.组织管理等诸多功能,是中小 ...

最新文章

  1. 如何将模糊的图片变得清晰
  2. Python的安装、pycharm的安装及设置
  3. 服务器虚拟化管理,几招让你快速成就你的服务器
  4. KClient——kafka消息中间件源码解读
  5. 18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列
  6. 悲观锁代码java_悲观锁的代码实现如何编写?
  7. 那些中国式家庭的小烦恼,我看用AI来解决就“都挺好” | 技术头条
  8. django-模板语言
  9. Flutter修仙传第一章:从Form入手学会组件使用
  10. 计算机组装错题整理,数学排列组合部分错题精选.docx
  11. TCP Traffic Analyzer
  12. C++教程:C++开发的四重境界是什么?
  13. 计算机组成原理试题解析答案,计算机组成原理习题答案解析(蒋本珊)
  14. JMeter下载及使用
  15. 信源编码与信道编码区别(十一)
  16. 改写jtopo滚轮缩放代码
  17. 吾爱破解python就业班_我吾 区别
  18. 人工智能与算法学习总结报告!(珍藏版)
  19. 鼠标控制c语言扫雷程序,【源码项目】C语言/C+开发,打造一个小项目扫雷小游戏!...
  20. 如何使用NFC读卡器读取NFC卡片的UID

热门文章

  1. 重温与解析《最后生还者》的互动叙事精髓(下)
  2. css 平移到某个位置_Html基本的动画效果(平移,旋转)
  3. html需要编译执行吗,Javascript代码需要编译以后才能执行。
  4. 魏宇轩后台管理(1)_项目介绍
  5. 我的世界服务器整人系列,我的世界:整人还在用TNT?老玩家用这7个道具简直谁见谁怕!...
  6. 【EC算法】多模态优化(multimodel)与小生境(Niching)
  7. 2020年64种最佳免费WordPress博客主题
  8. Python3计算今天是否生日以及距离生日还有多少天
  9. 电路板上的插头怎么拔下来_如何在电路板上完美的取下多针脚电子元件?求高手指教方法技巧?...
  10. java 连接Linux服务器并执行指令