cv2.imshow() crashes Kernel

用pyplot.imshow取代cv2.imshow

我在运行cv2.imshow和destroyAllWindows时,Jupyter notebook出现如下告警,然后Visual studio code崩溃,必须重启才能正常。

Error: Direct kernel connection broken

githhub上分析这不是notebook问题,应该与ipython或ipykernel有关。

后来采用matplotlib的pyplot函数,效果更好

%matplotlib inline
from matplotlib import pyplot as plt
img1 = cv2.imread("ls.jpg")
plt.imshow(img1)
plt.show()

Screen Shot 2021-02-27 at 6.31.42 PM

cv2是BGR与pyplot是RGB

为什么上图人脸发蓝,因为图片是用cv2读取的,颜色顺序是BGR,而pyplot是RGB,因此需要做一个转换。

plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))
#plt.imshow(img1)
plt.show()

Screen Shot 2021-02-27 at 10.26.00 PM
Screen Shot 2021-02-27 at 10.25.46 PM

参考
stackoverflow
github
BGR2RGB

Learning OpenCV Day one

运行demo文件:

import cv2
image = cv2.imread('MyPic.png')
cv2.imwrite('MyPic.jpg', image)

出现如下错误

cv2.error: OpenCV(4.5.1) /tmp/opencv-20210108-6455-1src644/opencv-4.5.1/modules/imgcodecs/src/loadsave.cpp:753: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'

修改mypic.png为绝对路径(/Users/m…/Study/learningOC/MyPic.png),修复完成。

解决opt_flow.py问题

terminal问题

昨天测试opt_flow还正常,今天发现在studio code下面就现实无法获取摄像头权限(hist.py都正常),命令行模式也无法运行。
做了如下修改:

brew update-reset

同时修改了pip的源(从清华修改为科大)。
因为做了两个操作,我也不清楚是哪个起了作用,命令行模式是ok了。

vscode问题

国外大拿分析(见参考),vscode下opcv摄像头没有权限,是由于apple mac没有给予vscode权限,在system preference里的camera部分,也没有能够增加vscode的地方,因此需要直接修改security&privacy存储数据的地方,见下面。完成后重启vscode即可(修改前,需要在system preference里授予terminal-Full Disk Access权限)

cd ~/Library/Application Support/com.apple.TCC
cp TCC.db TCC.db_backup
sqlite3 TCC.db
INSERT into access (service, client, client_type, auth_value, auth_reason, auth_version) VALUES ("kTCCServiceCamera","com.microsoft.VSCode",0,2,0,1);
INSERT into access (service, client, client_type, auth_value, auth_reason, auth_version) VALUES ("kTCCServiceMicrophone","com.microsoft.VSCode",0,2,0,1);
.exit

Screen Shot 2021-02-22 at 21.55.12

参考
vscode获得camera权限

pip3使用国内源更新&解决futu-api库安装问题

方法1

使用如下命令。

python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

但是在安装futu-api时,总是报错,如下
Screen Shot 2021-02-21 at 18.52.38

分析核心问题应该是

WARNING: You are using pip version 20.2.3; however, version 21.0.1 is available.
You should consider upgrading via the '/usr/local/opt/python@3.9/bin/python3.9 -m pip install --upgrade pip' command.

采用方法1的时候,很有可能并没有更新pip3,还是在错误的目录下下载文件。
所以需要首先确定pip3的版本最新,那么只有进行全局变量的配置,见方法2

方法2

mac和linux配置方法相同

mkdir ~/.pip
vi ~/.pip/pip.conf

在文件中粘贴如下内容,用科大源替换也可以。

[global]
 
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
 
trusted-host = pypi.tuna.tsinghua.edu.cn

然后升级

sudo pip3 install --upgrade pip

Screen Shot 2021-02-21 at 19.01.32

参考
替换pip国内源
替换pip国内源/tencent

国内的pip源

阿里云:https://mirrors.aliyun.com/pypi/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

解决No module name ‘futu’问题

运行futu给的demo代码,总是出现如下错误,找不到futu api这个库
Screen Shot 2021-02-21 at 22.35.10
但是采用python2调用时,则没有类似告警。
这基本可以判断,问题是mac上有两套python环境导致的(mac自带python2环境)。
解决方法如下

  1. 在python3下运行如下代码,获得python3的interpreter路径

    >>> import sys
    >>> print(sys.executable)
    /usr/local/opt/python@3.9/bin/python3.9
  2. 在命令行下(注意,不是python环境下),进入interpreter路径执行安装futu-api命令
    不过这里我也没有搞懂,为什么不适用pip3也能安装成功

    ➜ /usr/local/opt/python@3.9/bin/python3.9 -m pip install futu-api
    

    下面则是执行demo代码成功的结果。
    Screen Shot 2021-02-21 at 22.45.57

参考
富途Q&A

windows下安装Opencv@python

经历了mac下安装opencv,几乎用了2天时间踩各种坑。没有想到,windows上的安装异常顺利,今天上班后,大概10分钟就安装完毕,并且运行sample一次成功。

在power shell里输入如下命令

pip install numpy
pip install opencv_python
pip install opencv-contrib-python

然后,就ok了(前提是已经安装好python和studio code)

查看opencv版本如下

python
import cv2
cv2.__version__ #注意是两个下划线

我猜想,windows对opencv支持的如此好,原因是opencv毕竟来自intel

解决opencv演示sample问题/安装python3缺少的numpy库

在macbook pro上,无法正常演示opencv自带的sample文件,显示没有numpy库。

发现如果使用python2是正常的,而是python3(也包括visual studio code)缺少对应的库,解决问题方法如下。

查看目前库

首先通过list命令,对比pip和pip3,即python2(mac自带)和python3相关库的情况,结果是python的非常少

pip list
pip3 list 

也可以用freeze命令。

pip3 freeze

安装numpy库

正常采用如下命令

pip3 install numpy

但是国外的源太慢,更换成科大的,速度飞起

pip3 install --index-url https://pypi.mirrors.ustc.edu.cn/simple/ numpy

下图是通过科大源安装matplotlib的情况,速度快如闪电。
Screen Shot 2021-02-17 at 11.03.13 PM

如下是国内源列表

    清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

    阿里云 http://mirrors.aliyun.com/pypi/simple/

    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

    豆瓣(douban) http://pypi.douban.com/simple/

参考如下
国内源
pip vs pip3
numpy tutorial 1/official
numpy tutorials 2

验证numpy是否安装的小技巧

numpy

如下

>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

Brew

mac更新到big sur之后,brew运行就不正常。在发现使用更新中科大源之前,我才用的是如下方法,也能解决问题,只不过在imac上可以正常安装opencv,而mac pro上则失败了,后来在两台电脑上全部重新安装了中科大版本的brew,才最终解决,下面将原操作做个记录。

  • 首先,在使用brew list或brew doctor后,出现的是下面的问题

    Traceback (most recent call last):
    11: from /usr/local/Homebrew/Library/Homebrew/brew.rb:23:in `<main>'
    10: from /usr/local/Homebrew/Library/Homebrew/brew.rb:23:in `require_relative'
    9: from /usr/local/Homebrew/Library/Homebrew/global.rb:37:in `<top (required)>'
    8: from /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    7: from /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    6: from /usr/local/Homebrew/Library/Homebrew/os.rb:3:in `<top (required)>'
  • 然后,删除xcode工具,并重新安装

    sudo rm -rf /Library/Developer/CommandLineTools
    sudo xcode-select --install
    
  • 最后,更新brew即可

    brew upgrade
    

    当然,最好的方法是

    brew update-reset
    brew cleanup
    

    参考
    brew更新问题
    更换科大brew源

brew和zsh的小问题

brew

昨天开始学习opencv,一天时间把环境都没有搞好,主要是mac系统升级到big sur以后,brew出现了很多告警,而且跟新起来除了很多问题,包括使用【brew update-reset】重新安装xcode tools也不行,终于下定决心,重新安装brew,问题基本搞定,安装脚本如下

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

然后依次安装opencv和scipy库

brew doctor
brew install python(我已经安装好了)
brew install opencv
brew install scipy

查看opencv版本如下

opencv_version

ZSH

使用国内中科大的源,安装完brew后,每次打开terminal,会出现如下提示

[oh-my-zsh] Insecure completion-dependent directories detected:
drwxrwxrwx 7 hans admin 238 2 9 10:13 /usr/local/share/zsh
drwxrwxrwx 6 hans admin 204 10 1 2017 /usr/local/share/zsh/site-functions

大意是zsh认为目录权限有问题,解决方法如下

chmod 755 /usr/local/share/zsh
chmod 755 /usr/local/share/zsh/site-functions

参考
1 zsh问题
2 brew中科大源

systemctl命令简介

systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:
systemctl [command] [unit]
command 主要有:
start:立刻启动后面接的 unit。
stop:立刻关闭后面接的 unit。
restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的 unit 会被启动。
disable:设置下次开机时,后面接的 unit 不会被启动。
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
is-active:目前有没有正在运行中。
is-enable:开机时有没有默认要启用这个 unit。
kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
show:列出 unit 的配置。
mask:注销 unit,注销后你就无法启动这个 unit 了。
unmask:取消对 unit 的注销。

上周同事提出辞职

上周五,团队的一个同学找我,说有些事要聊聊。去往会议室的路上,我心里猜他是不是要离职。

果然,刚刚落座,他有些不好意思的说,我打算辞职,过了年就要走。

“是什么原因呢?”我问到。
“现在对家里照顾不到,2个小孩子都在小学,全靠我爱人,她太辛苦了.”同学说。

“打算去哪里,有下家吗?”我问他。
“BXX和HXX,他们在苏州都有基地。”同学犹豫了一下,还是说了。

“具体负责哪方面工作?”我比较好奇,毕竟一个是互联网公司,一个是安防领域的,似乎和我们现在的行业有点距离。
“是交通行业,华东地区的售前,其实来公司之前,他们就给了offer,你知道的,他们的HR一直没有放弃联系我,加上现在对小孩照顾不到,家里人意见非常大。”同学有些无奈的说。

我很理解他,中年人到了这个阶段,生活的重心基本都在孩子,两个小孩都上小学,仅仅辅导功课,就可以让家长崩溃,我自己深有体会。

”我能做些什么吗?比如和HR商量,让你把常驻地改回苏州,这样可以解决问题吗?“我征询他的意见。
”这个办法我也和HR沟通过,非常困难,而且五险一金也没法在苏州缴纳,对个人影响蛮大的。“他有点不相信。

”让我试试吧。“我建议,我印象山东有位负责售前的同学,他的常驻地就在南京,也许我抓紧和HR沟通,这个问题可以有办法。
”也行。“他有些勉强答道,”不过是不是要提前一个月提辞职,我担心到时候时间来不及。“

”没事,你今天和我说了,就算是提了辞职,如果HR那边搞不定,差几天问题不大,这事我能做主。“我给了他一个承诺。

因为这个,周末两天心情不太好,小李问了我两次,爸爸你为什么这么严肃?我和他说了此事,他也给不出什么建议,不过至少小李从小明白一个道理:工作后很多事情难如人意。

同学做事很认真,碰到问题会积极主动解决,也不畏学习新的知识和技能,加上工作经验丰富,是非常合适的员工。

不过,有些事情不能勉强,毕竟同学离职,还有一个原因,他说过去一年的成就感不强,未来短期内也看不到高速行业能有什么突破。

后面这个因素,对我是有触动的,毕竟选择什么方向是团队leader的责任,我把这个方向交给他,推进的如此艰难,如果还要劝他再等等,岂不是太自私?为什么要在一个看不到曙光的赛道上挣扎呢?就算2年后真的会爆发,谁又能保证我们不被淘汰呢?

2021,开始的征兆就不好。