当前位置: 首页 > 编程日记 > 正文

[svc]caffe安装笔记-显卡购买

caffe,这是是数据组需要做一些大数据模型的训练(深度学习), 要求 服务器+显卡(运算卡), 刚开始老板让买的牌子是泰坦的(这是2年前的事情了). 后来买不到这个牌子的,(jd,tb)看过丽台的,看过gtx系列的哪个型号来着, 也不合适,后来买的特斯拉显卡

[查了下一些知名的显卡牌子](https://www.zhihu.com/question/42110806)
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7vm1f8zoj214t0mdgz1.jpg)


最终敲定买特斯拉系列Tesla K20Xm.
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7vx49iscj20hg0dc449.jpg)

第一次买的这个玩意可以识别,也可以跑,就是跑着跑着发烧服务器就自动重启了. 后来联系厂家后寄回,他们发了个有风扇的给我, 之后跑起来就没啥问题了.

```
Graphics Card Interface: PCI-E
Graphics Coprocessor: Tesla K20
Graphics Card Ram: 5 GB
Graphics Ram Type: GDDR5
```
这个卡好像是2-32w左右吧. 忘记了.总之上万了.


caffe安装过程相当的麻烦,步骤较多. 后台发现[docker可以轻易的安装](https://hub.docker.com/r/bvlc/caffe/tags/),免费了很多烦恼
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7w3i1pwvj20nx0azq3e.jpg)

不过经历了这些麻烦后,发现老当益壮, 无论什么linux新的服务都不惧了(因为当初接触linux时间不是很长)

# 1. 环境及安装前检查
```
- 服务器硬件:
戴尔T630,类似台式机一样,立式的. CPU32核/64G内存/4G硬盘

- 显卡:
root@shendu:~# lspci |grep -i nvidia
02:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20Xm] (rev a1)

- 软件:
Ubuntu14.04 server64bit版本:ubuntu-14.04.5-server-amd64.iso
Python 2.7.12
root@shendu:~# uname -a
Linux shendu.pp100.net 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

说明:购买服务器和显卡就费了不少时间,蛋疼点是两者兼容性,不太好买,买回来后有些主板可能不兼容导致lspci|grep –i nvidia没结果,就是主板识别不了显卡。折腾了好久返回厂家换了一次,搞好了。

- 安装说明:
依赖+cudnn+ Anaconda2 +caffe

安装过程统一用root账号,统一安装在 /root/caffe目录下。

- 安装前检查:
*首先验证你是否有nvidia的显卡(http://developer.nvidia.com/cuda-gpus这个网站查看你是否有支持gpu的显卡):
$ lspci | grep -i nvidia

*查看linux发行版本
uname -m && cat /etc/*release*看gcc版本
$ gcc --version
说明:是cuda 32位尚未找到合适的安装包,所以这里的linux要64位的)
```

# 2. 安装依赖
```
apt-get install build-essential # basic requirement
apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler #required by caffe
apt-get install libatlas-base-dev -y
apt-get install libprotobuf-dev -y
apt-get install libleveldb-dev -y
apt-get install libsnappy-dev -y
apt-get install libopencv-dev -y
apt-get install libboost-all-dev -y
apt-get install libhdf5-serial-dev -y
apt-get install libgflags-dev -y
apt-get install libgoogle-glog-dev -y
apt-get install liblmdb-dev -y
apt-get install protobuf-compiler –y
apt-get install libatlas-base-dev #安装Intel MKL 或Atlas,默认我们用显卡来运算,软件默认就是Atlas,保持不变
```

# 3. 安装cuda7.5
*在cuda官网(https://developer.nvidia.com/cuda-downloads#linux )下载对应版本

![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7uf0imv8j20bq04t74z.jpg)

下载并安装
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7ufavvyzj207700jjra.jpg)

```
dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
```

安装cuda(安装cuda的同时就会把显卡驱动也全部安装好)
```
apt-get update
apt-get install cuda –y
```

# 4. 安装cudnn
```
tar xf cudnn-7.5-linux-x64-v5.0-ga.tgz #自行下载
cd cuda
cp lib64/* /usr/local/cuda/lib64/
cp include/cudnn.h /usr/local/cuda/include/

- 更新软连接
cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.5.0.5
sudo ln -sf libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -sf libcudnn.so.5 libcudnn.so
sudo ldconfig
echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf.d/cuda.conf
echo '/root/anaconda2/lib' >> /etc/ld.so.conf

- 统一设置环境变量
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/root/anaconda2/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=/root/caffe/caffe-master/python
```

# 5. 安装CUDA SAMPLE
```
cd /usr/local/cuda/samples
make all –j12 #此处会报错,看后文解决.
reboot
cd /usr/local/cuda/samples/bin/x86_64/linux/release
./deviceQuery #如果出现显卡信息, 则驱动及显卡安装成功
```

# 6. 安装opencv
```
https://github.com/bearpaw/Install-OpenCV #下载zip包,拖进Ubuntu解压到/root/caffe
下载opencv-2.4.9.zip 到/root/caffe下 #自行网上下载
root@shendu:~/caffe# ls
caffe-master caffe-master.zip Install-OpenCV Install-OpenCV-master.zip opencv-2.4.9 opencv-2.4.9.zip
root@shendu:~/caffe# pwd
/root/caffe
#安装依赖
/root/caffe/Install-OpenCV-master/Ubuntu/dependencies.sh
#安装脚本修改
root@shendu:~/caffe/Install-OpenCV/Ubuntu/2.4# cat opencv2_4_9.sh
arch=$(uname -m)
if [ "$arch" == "i686" -o "$arch" == "i386" -o "$arch" == "i486" -o "$arch" == "i586" ]; then
flag=1
else
flag=0
fi
echo "Installing OpenCV 2.4.9"
mkdir OpenCV
cd OpenCV
echo "Removing any pre-installed ffmpeg and x264"
sudo apt-get -y remove ffmpeg x264 libx264-dev
echo "Installing Dependenices"
sudo apt-get -y install libopencv-dev
sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm
sudo apt-get -y install libtiff4-dev libjpeg-dev libjasper-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev
sudo apt-get -y install python-dev python-numpy
sudo apt-get -y install libtbb-dev
sudo apt-get -y install libqt4-dev libgtk2.0-dev
sudo apt-get -y install libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev
sudo apt-get -y install x264 v4l-utils ffmpeg
# sudo apt-get -y install libgtk2.0-dev # duplicate
echo "Downloading OpenCV 2.4.9"
#wget -O OpenCV-2.4.9.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download #注释掉
echo "Installing OpenCV 2.4.9"
unzip OpenCV-2.4.9.zip
cd opencv-2.4.9
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF .. #添加这三项
make -j12
sudo make install
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
cd ../../..
rm -rf OpenCV
echo "OpenCV 2.4.9 ready to be used"

mkdir –p /root/caffe/Install-OpenCV/Ubuntu/2.4/
cp /root/caffe/opencv-2.4.9.zip /root/caffe/Install-OpenCV/Ubuntu/2.4/OpenCV/OpenCV-2.4.9.zip
/root/caffe/Install-OpenCV/Ubuntu/2.4/opencv2_4_9.sh
```

# 7. 安装Caffe所需要的Python环境
```
https://www.continuum.io/downloads#all
bash /root/Anaconda2-4.2.0-Linux-x86_64.sh #一路yes即可。
reboot
cd /root/caffe/caffe-master/python
for req in $(cat requirements.txt); do pip install $req; done #安装前先看看你的echo $PATH正常不。有问题重启下机器。
```

# 8. 安装caffe(操作前重启下机器,确保$PATH正常)
```
cd /root/caffe/caffe-master
cp Makefile.config.example Makefile.config
ldconfig
conda remove libtiff
make all –j12
make test
make runtest
make pycaffe
```
# 9. 测试验证
```
1.
sudo sh ./examples/mnist/create_mnist.sh
生成mnist-train-leveldb/ 和 mnist-test-leveldb/文件夹,这里包含了LDB格式的数据集
注:新版caffe都需要从根目录上执行,如果使用下列命令执行:
# cd examples/mnist
# sudo sh ./create_mnist.sh
可能会遇到这个错误:./create_mnist.sh: 16: ./create_mnist.sh: build/examples/mnist/convert_mnist_data.bin: not found,全路径试试。
2,验证python
import caffe #此处不要用ipython,可以用bpython。
3,查看显卡驱动版本
查看显卡的驱动版本
cat /proc/driver/nvidia/version
4) Verify the driver version:
$ cat /proc/driver/nvidia/version

5) Check CUDA driver version:
$ nvcc -V

cd /usr/local/cuda/samples/bin/x86_64/linux/release
./deviceQuery
./bandwidthTest

nvidia-settings –v
```

```
查看gpu温度等:
nvidia-smi

nvidia-smi -a|grep "GPU Current Temp"|awk -F" " '{print $5}'
nvidia-smi -a|grep -A 4 "Utilization"|sed -n '2p'|awk -F':' '{print $2}'|awk -F' ' '{print $1}'
nvidia-smi -a|grep -A 4 "Utilization"|sed -n '3p'|awk -F':' '{print $2}'|awk -F' ' '{print $1}'

gpu当前温度
UserParameter=gpu_temper,nvidia-smi -a|grep "GPU Current Temp"|awk -F" " '{print $5}'

gpu使用率:
UserParameter=gpu_ulim,nvidia-smi -a|grep -A 4 "Utilization"|sed -n '2p'|awk -F':' '{print $2}'|awk -F' ' '{print $1}'
UserParameter=gpu_mem_ulim,nvidia-smi -a|grep -A 4 "Utilization"|sed -n '3p'|awk -F':' '{print $2}'|awk -F' ' '{print $1}'
```

# 10. 第5步报错解决
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7uibmuowj20id01i3z7.jpg)

```
原因: /usr/local/cuda/samples下是nvidia-352,而我的NVIDIA是367,需要批量替换掉sample下的不正确的文件(即将sample下所有文件包含nvidia-352关键字替换为nvidia-367),我写了个脚本处理这事.
cd /usr/local/cuda/samples
grep -r "nvidia-352" . > aaa.txt

root@shendu:/usr/local/cuda/samples# cat t.sh
for i in `cat aaa.txt`;do
sed -i 's#nvidia-352#nvidia-367#g' $i
done

sh t.sh
参考:https://devtalk.nvidia.com/default/topic/769578/cuda-6-5-cannot-find-lnvcuvid/
```

# 11. 监控gpu使用率
```
先决条件: 你需要安装好CUDA
echo $PATH 含有类似/usr/local/cuda/bin
Linux系统,在程序运行的时候,如何实时监控GPU卡的使用率呢?
在终端窗口输入如下命令:
# nvidia-smi -l
nvidia-smi(NVIDIA System Management Interface)可以实时监控GPU卡的使用情况,-l是其参数,用于循环显示。
```
下图是插有1片K20卡的机器运行nvidia-smi-l后的显示示意图:
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7uip23n5j20h807jtar.jpg)

可以看到,这时没有调用GPU的程序在运行,GPU卡的使用率为0%。
有程序运行时,显示示意如下图。下面的大框显示程序名,GPU卡的使用率为59%。
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7uixqhoij20hj07omxs.jpg)
K80是双核心卡,1片K80即2个GPU设备。没有使用率时的显示示意图如下:
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7uj79y9cj20ht090mxt.jpg)
如果程序调用1个GPU设备,那么nvidia-smi –l 的执行结果如下图所示:
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7ujda5mxj20hn08r3z6.jpg)
如果程序调用2个GPU设备,那么nvidia-smi –l 的执行结果如下图所示:
![](https://ws1.sinaimg.cn/large/9e792b8fgy1fo7ujlv1q8j20f507ftar.jpg)

相关文章:

AABO:自适应最优化Anchor设置,性能榨取的最后一步 | ECCV 2020

编译 | VincentLee来源 | 晓飞的算法工程笔记Introduction目前,主流的目标检测算法使用多种形状的anchor box作为初始预测,然后对anchor box进行回归调整,anchor box的配置是检测算法中十分重要的超参数。一般而言,anchor box的配…

Android列表控件选项中添加进度框ProgressBar实现

今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦&am…

写一个通用数据访问组件

出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(native data provider)稳定而强大功能的前提下来访问不同的数据源(data sources).一个小伙子…

InstallShield 2015 LimitedEdition VS2012 运行bat文件

转载:http://www.cnblogs.com/fengwenit/p/4271150.html 运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用。 1. 打开 Define Setup Requirements and Actions –> Custom Actions 2. 右健 After Register Product –> Ne…

理解C#中的string类型

作者:未知目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类…

最全总结!聊聊 Python 操作PDF的几种方法

作者 | 陈熹来源 | 早起Python前言本文主要涉及:os 模块综合应用glob 模块综合应用PyPDF2 模块操作基本操作PyPDF2 导入模块的代码常常是:from PyPDF2 import PdfFileReader, PdfFileWriter这里导入了两个方法:PdfFileReader 可以理解为读取器…

three.js(六) 地形法向量生成

2019独角兽企业重金招聘Python工程师标准>>> 上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。 three.js 的PlaneGeometry 自带有法向量, 法向量分为两种 即 平面法向量 和 平面每个定点法向量。 因此一个n*n 块组成…

ASP.NET中使用多个runat=server form

作者&#xff1a;未知ASP.NET 在同一个页面不支持多个 runatserver forms&#xff0c;要解决这个问题&#xff0c;可以把每个 form 放在一个单独的 panel 控件中&#xff0c;这样用户就可以简单地通过单选按钮在不同 panel 间切换。代码如下&#xff1a;2FormExample.aspx<%…

激发企业大“智慧” | 深度赋能AI全场景 揭秘你不知道的移动云

2020年是人工智能技术发展的关键年。疫情之下&#xff0c;世界见证了人工智能在抗击疫情中发挥的积极作用&#xff1b;今年4月&#xff0c;国家发改委正式将人工智能确定为新基建的重要领域之一。在历史机遇下&#xff0c;AI已实现"质变和量变"&#xff0c;正迈入与技…

ExtJS 4.x 得到资源树上任意的节点对象

上半年做ExtJS 4.x 的时候&#xff0c;遇到过对资源树操作的情况&#xff1a; Ext.tree.Panel 如下图&#xff1a;目的&#xff1a; 直接根据每个节点的{任意key : 对应value}&#xff0c;就能找到匹配的节点对象 代码如下&#xff1a; refs : [ { selector : rtree, …

【转载】mysql常用函数汇总

转载地址&#xff1a;http://www.jb51.net/article/40179.htm 一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制&#xff08;OCT返回八进制&#xff0c;HEX返回十六进制&#xff09;CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e&#xff08;自然对数的底&…

有关java的一些话

2019独角兽企业重金招聘Python工程师标准>>> 跟着做完TankWar&#xff0c;java才算是入门了&#xff0c;真正学习java从看尚学堂马士兵老师的视频开始&#xff0c;至今三个月已过&#xff0c;感谢马老师的精彩讲解&#xff0c;您才是我真正的java入门老师&#xff0…

ADO.NET 2.0中的SqlCommand.ExecutePageReader

http://blog.joycode.com/liuhuimiao/在.NET 2.0 PDC或Beta1中&#xff0c;可以看到SqlCommand对象新增了个ExecutePageReader方法&#xff0c;该方法实现了分页读取数据的功能。对于分页读取数据&#xff0c;在ADO.NET1.1中&#xff08;当然2.0也适合&#xff09;一般常用动态…

组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战

来源 | MyEncyclopedia上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法&#xff0c;通过不断自我对弈&#xff0c;最终实现从零棋力开始训练直至能够打败任何高手。在本篇中&#xff0c;我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法…

2020职场人裸辞三大原因:不开心、工资低、没有盼头

近期&#xff0c;脉脉发布了《2020职场人裸辞现状调研报道》&#xff0c;报道显示2020最让职场人想裸辞的三大原因为&#xff1a;不开心、工资低、没有盼头。报告数据中还显示&#xff0c;工资不满预期是最让人想要裸辞的主要原因&#xff0c;但有超过6成职场人表示&#xff0c…

Oracle PL/SQL编程学习笔记:Merge方法的使用

Oracle11g的Merge很强大&#xff01; 1 create or replace procedure BRANCE_REPORT_MERGE is2 3 begin4 Merge into BRANCHREPORT desttable5 using TEMP_BRANCHREPORT tmptable6 on (desttable.SENDER_IDtmptable.SENDER_ID and desttable.BRANCH_IDtmptable.BRANCH_ID…

2.0中获取数据库连接统计数据

作者&#xff1a; http://blog.joycode.com/liuhuimiao/.NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatistics()、RetrieveStatistics()两个方法&#xff0c;用于获取SQLServer的连接统计数据。当然&#xff0c;这样做是以性能损耗为代价的&#xff0c;但…

Python学习day5作业-ATM和购物商城

Python学习day5作业Python学习day5作业ATM和购物商城作业需求ATM&#xff1a;指定最大透支额度可取款定期还款&#xff08;每月指定日期还款&#xff0c;如15号&#xff09;可存款定期出账单支持多用户登陆&#xff0c;用户间转帐支持多用户管理员可添加账户、指定用户额度、冻…

60分钟看懂HMM的基本原理

作者 | 梁云1991来源 | Python与算法之美HMM模型&#xff0c;韩梅梅的中文拼音的缩写&#xff0c;所以又叫韩梅梅模型&#xff0c;由于这个模型的作者是韩梅梅的粉丝&#xff0c;所以给这个模型取名为HMM。开玩笑&#xff01;HMM模型&#xff0c;也叫做隐马尔科夫模型&#xff…

获取远程网卡MAC地址

出自&#xff1a; http://blog.joycode.com/liuhuimiao/朋友mingal急问我有关获取远程网卡MAC地址的ASP.net实现。我一开始以为是获取本机MAC地址&#xff0c;说了几种方法给他。由于他还需要获取服务器&#xff08;本机&#xff09;相关信息&#xff0c;如硬盘序列号、CPU信息…

[hadoop源码阅读][9]-mapreduce-概论

hadoop的mapreduce的运行流程大概就是如下图所示了 如果要是文字描述,估计要大篇幅了,大家可以参考下面的参考文档. 参考文档 1.http://caibinbupt.iteye.com/blog/336467 2.http://hadoop.apache.org/docs/r0.19.2/cn/mapred_tutorial.html 3.http://developer.yahoo.com/hado…

【小白的CFD之旅】小结及预告

这是小白系列的索引&#xff0c;后续会继续更新。 已更新的部分 01 引子02 江小白03 老蓝04 任务05 补充基础06 流体力学基础07 CFD常识08 CFD速成之道09 初识FLUENT10 敲门实例11 敲门实例【续】12 敲门实例【续2】13 敲门实例【续3】14 实例反思15 四种境界16 流程17 需要编程…

Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了

作者 | 刘早起来源 | 早起Python导语&#xff1a;很多同学在学习机器学习时往往掉进了不停看书、刷视频的&#xff0c;但缺少实际项目训练的坑&#xff0c;有时想去练习却又找不到一个足够完整的教程&#xff0c;本项目翻译自kaggle入门项目Titanic金牌获得者的Kernel&#xff…

input type右对齐与只读的

右对齐的 <input type"text" style"background:#efefef; text-align:right" readonly value"this" /> 只读的input <input type"text" name"nodeCode" readonly value"<%functionNodeForm.getNodeCode()%…

如何从sdcard读取文件

2019独角兽企业重金招聘Python工程师标准>>> 首先&#xff0c;我们必须明白文件储存格式是有许多种的&#xff0c;如utf-8,unicode等。 那么&#xff0c;我们如何将文件原封不动的读取出来呢&#xff0c;我们可以设定&#xff0c;文件储存的绝对路径为filepath。则代…

HDU 2034 人见人爱A-B

人见人爱A-B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 77157 Accepted Submission(s): 21509 Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目&#xff0c;就是{A}{B}&#…

Java中的包,类的导入,静态导入

包的作用 1. 为了更好的组织代码&#xff0c;能够将自己的代码与代码库的代码分离。 2. 在需要合作完成的工作中&#xff0c;可以使用分包的方式来尽量的减少类命名的冲突。 Sun公司推荐程序员使用公司域名的反向字符作为公司项目的起始包名&#xff1a;如 baidu.com --> c…

实现800*600,1024*768两套分辨率方案

下面这段代码&#xff0c;可以实现800*600,1024*768两套分辨率方案。 <html><head><title>Untitled Document</title><script language"javascript">function go(){var myWidthscreen.widthif (myWidth>800){window.location.repl…

倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行

经过7 个月的激烈角逐&#xff0c;由高通公司&#xff08;Qualcomm&#xff09;、中国智谷重庆经开区、CSDN、Testin云测、OPPO、极视角、中科创达、创业邦联合主办&#xff0c;重庆经开区高通中国中科创达联合创新中心协办&#xff0c;TensorFlow Lite 作为开源技术合作伙伴的…

IOS分享扩展使用JS脚本

2019独角兽企业重金招聘Python工程师标准>>> 实现一个分享扩展插件&#xff0c;功能是从Safari网页中截取当前网页的图片内容 基本的步骤总结在下面&#xff1a; 1.创建一个JS文件&#xff0c;命名为MyJavascriptFile.js&#xff0c;文件的功能是解析safari网页内容…