conda升级anaconda ValueError的解决办法

查到了这个:anaconda update issue

I have narrowed this down to the following packages:

package build
psutil-1.2.1 py27_0 hard-link
pycparser-2.10 py27_0 hard-link
pykit-0.1.0 np18py27_2 hard-link
pyparsing-2.0.1 py27_0 hard-link

by calling “conda install anaconda” and then successfully installing everything else one at a time.
These four packages consistently exhibit the described behaviour.
(note: pykit depends on pycparser so may itself be ok – can’t tell)

 

我先把psutil卸载掉,重新update了一下,成功。

 

数字图像处理大作业(初步)

…先随便记录一下好了。。。

  • 神经网络识别数字或者字母?
  • 识别车牌号?
  • not hot dog?

 

 

安装python pandas pandas

发现之前装caffe的时候…装了这个东西。。。

但是就是检测不到?于是卸载重装。。。。

需要注意的是,如果是python2,要用pip2 install pandas,如果是python3,要用pip3 install pandas.

 

安装tensorflow…直接sudo pacman -Syu python-tensorflow 即可。。。

然后装好之后检测不到orz…感觉还是pip的安装方式比较靠谱。。。

pip2 install tensorflow

tensorflow_pip安装

我的环境是python2.7

安装成功。。然后发现。。numpy挂了(?????

 

SO上给出的建议

感觉之后还会各种遇到不同python版本导致的问题。。。。那就上anaconda好了。。。

试了anaconda…想法挺好。。但是貌似还不成熟.。。比如用anaconda安装numpy会报错orz..

最后解决办法是。。。卸载了python-numpy以及所有依赖python-numpy的a包;卸载了python2-numpy以及所有a依赖python2-numpy的包

然后重新安装了python2-numpy

以及发现。。。还有些坑是shellaa相关的.。。y所以暂时不要用fish了。。。

 

然后提示Missing required dependencies [‘dateutil’]

解决办法是安装python2-datautil

以及各种pip安装。。都记得要pip2而不是pip

中间缺少一堆库。。。大部分直接安装就好了。。。记得要安装python2对应的版本。。。

然后对于ImportError: No module named tensorboard.plugins

解决办法 是将tensorflow升级到1.0以上(安装之后的版本默认为0.1)

sudo proxychains4 pip2 install tensorflow –upgrade

 

 

 

 

 

 

 

边界的链码,归一化链码,差分玛,形状数

复习一下数字图像处理。

按照我自己的理解简单来说:

原链码:按照任意起点走边界一周,方向按照上图对应的表示,得到的数字序列就是原链码。

归一化链码:为了解决原链码中起点不唯一而产生的序列不唯一的问题,规定,对于所有起点得到的原链码中,字典序最小的即为归一化链码(由于序列都是自然数,因此字典序最小也可以理解成,把该序列看成有前导0的自然数之后的数值之后的数值最小。

差分码:为了解决图形旋转之后,原链码和归一化链码都会发生变化,引入差分码。n位原链码(或归一化链码,由于归一化链码只是一种特殊的原链码,之后不再单独强调)可以得到n-1位差分码。具体来说,对于原链码a[i](i属于1..n),可以得到差分码b[i],b[i] = ((a[i+1] – a[i])+mod)%mod(i属于1..n-1),mod根据实际有几个方向决定,通常为4或者8。

形状数:需要强调的是,形状数也是一个序列,而不是一个数。其实形状数就是把差分码按照字典序排序之后,最小的序列。形状数的阶数是该序列的长度。

 

Freeman链码(弗雷曼链码)是指用曲线起始点的坐标和边界点方向代码来描述曲线或边界的方法,常被用来在图像处理、计算机图形学、模式识别等领域中表示曲线和区域边界。它是一种边界的编码表示法,用边界方向作为编码依据,为简化边界的描述,一般描述的是边界点集。

常用的链码按照中心像素点邻接方向个数的不同,分为4连通链码和8连通链码。4连通链码的邻接点有4个,分别在中心点的上、下、左和右。8连通链码比4连通链码增加了4个斜方向,因为任意一个像素周围均有8个邻接点,而8连通链码正好与像素点的实际情况相符,能够准确地描述中心像素点与其邻接点的信息。因此,8连通链码的使用相对较多。

(a)四方向链码的方向符;                       (b)八方向链码的方向符。

八链码如下:

1. 链码的定义

按照水平、垂直和两条对角线方向,可以为相邻的两个像素点定义4个方向符:0、1、2、3,分别表示0°、90°、180°和270°四个方向。同样,也可以定义8个方向符:0、1、2、3、4、5、6、7。链码就是用线段的起点加上由这几个方向符所构成的一组数列,通常称之为Freeman链码。用Freeman链码表示曲线时需要曲线的起点,对8链码而言,奇数码和偶数码的对应线段长度不等,规定偶数码单位长度为1,奇数码的单位长度为1.414。

2. 曲线的链码表示

(1)原链码  从边界(曲线)起点S开始,按顺时针方向观察每一线段走向,并用相应的指向符表示,结果就形成表示该边界(曲线)的数码序列,称为原链码,表示为

其中,S表示边界(曲线)的起点坐标,N=4或8时分别表示四链码和八链码。当边界(曲线)闭合时,会回到起点,S可省略。

(2)归一化链码

原链码具有平移不变性(平移时不改变指向符),但当改变起点S时,会得到不同的链码表示,即不具备唯一性。为此可引入归一化链码,其方法是:

对于闭合边界,任选一起点S得到原链码,将链码看作由各方向数构成的n位自然数,将该码按一个方向循环,使其构成的n位自然数最小,此时就形成起点唯一的链码,称为归一化链码,也称为规格化链码。我们将这样转换后所对应的链码起点作为这个边界的归—化链码的起点。

(3)链码的旋转归一化

用链码表示给定目标的边界时,如果目标平移,链码不会发生变化。

但是,如果目标旋转则链码会发生变化。为了得到具有旋转不变性的链码,我们可定义所谓的差分码。链码对应的差分码定义为:

对差分码进行(起点)归一化,就可得到归一化(唯一)的差分码,它具有平移和旋转不变性,也具有唯一性。

3. 边界的形状数表示

由于归一化的差分码既具有唯一性,也具有目标物平移和旋转不变性,因此可用来表示边界,称为形状数。形状数序列的长度(位数)称为形状数的阶,它可作为闭合边界的周长。

如上图所示的目标边界,其

原链码为:42120606454                   ,

差分码为 :   6716626617               ,

形状数:         1662661767               ,

形状数的阶为10 。

 

 

 

参考资料:

图像形状特征(三)–链码及形状数

中南大学_第7章 目标表达和描述技术

 

qt 5.x 初探 (5) 

qt_5.9_ui_doc

还是比直接写代码方便点。。。所以不妨学习一个!

以及。。。qt在2017年6月1号发布了5.9。。。所以之前是5.8。。。现在变成5.9了。。。

遇到了修改了ui文件却没有生效的问题。。。

解决办法:

 

时间测试的qt方法。。。

 

qt 5.x初探 (4) qt 在win下打包成exe

des的基本搞定了。。。打包。。。

在linux下打包成exe。。。。实在是。。没什么好办法的样子。。。

嘛。转念一想。老师说是打包成可执行文件。。。没说一定是exe啊。。。

然后也许我就零分了呢2333

 

des1.0

 

好了。。我又跑到windows下装了个qt…安装包2.3G,记得要安装编译器…

装好以后。。。开始打包。。。

注意区分:

Qt Widgets Application 和 Qt Quick Application

我的是后者。。。打包方式略有不同。。。

下面引用了详细步骤。。我来说下简略步骤好了。。。

  • 将creator选到release的部署模式。。然后编译。。。
  • 将exe文件单独拷贝出来,放到一个文件夹。。。
  • 运行qt的命令行(不是系统的命令行!)
  • 在qt的命令行中运行windeployqt helloqml.exe –qmldir C:\Qt\Qt5.4.0\5.4\mingw491_32\qml(其中qmldir后面换为qml的真实路径)

 

顺便吐槽这工具有点智障。。。文件夹选项不显示后缀名就找不到helloqml  也是有毒。。。

 

 

 

 

Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,
如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行。
因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。
以官方 Qt 5.4.0+MinGW 开发环境为例,
从开始菜单–》Qt 5.4.0–》5.4–》MinGW 4.9 (32-bit)–》Qt 5.4 for Desktop (MinGW 4.9 32 bit),可以打开 Qt 命令行,从这里就可以执行 windeployqt 工具。

集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:
Qt Widgets Application 和 Qt Quick Application。
下面分别介绍这两类exe 的发布方式。

1、Qt Widgets Application可执行程序发布方式
首先用 QtCreator 新建一个 Qt Widgets Application 项目,直接用默认的 QMainWindow 程序就可以了,项目名字假定是 hellomw。
然后以 Release 方式编译生成 exe 程序:

生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:
C:\QtPros\hellomw\
它的项目生成目录是
C:\QtPros\build-hellomw-Desktop_Qt_5_4_0_MinGW_32bit-Release\
进入这个文件夹,在进入它的子文件夹 release 里面,找到 hellomw.exe ,
将这个exe 复制到一个新的单独的文件夹里用于发布,比如存到
D:\hellomw\ 文件夹里面。

然后从开始菜单打开 Qt 命令行,输入命令 :
cd /d D:\hellomw
然后使用 windeployqt 工具命令:
windeployqt hellomw.exe

然后可以在 D:\hellomw 文件夹里看到 windeployqt 工具自动复制的插件文件夹
和 dll文件、qm文件。这时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。

把 D:\hellomw 文件夹 打包就可以发布了,不用自己一个个找 dll 文件了。
D:\hellomw 文件夹里的qm文件是多国语言翻译文件,不需要可以删了,
其他的都保留。

2、Qt Quick Application发布方式
首先用 QtCreator 新建一个 Qt Quick Application 项目,直接用默认的项目模版,点击下一步生成项目,项目名字假定是 helloqml。
然后以 Release 方式编译生成 exe 程序:

然后找到项目的构建目录,比如项目源码目录 C:\QtPros\helloqml,
它的构建目录是:
C:\QtPros\build-helloqml-Desktop_Qt_5_4_0_MinGW_32bit-Release\
进入这个目录,再进入 release 子文件夹,找到 helloqml.exe ,
复制到一个新的单独的文件夹里面,比如 D:\helloqml\ 文件夹里面。

然后从开始菜单打开 Qt 命令行,进入D:\helloqml\文件夹:
cd /d D:\helloqml
然后使用 windeployqt 工具命令:
windeployqt helloqml.exe –qmldir C:\Qt\Qt5.4.0\5.4\mingw491_32\qml

注意不要跟烧包一样照抄上条命令,–qmldir 是指出 Qt 库里面的 qml 文件夹位置,
上面命令里 C:\Qt\Qt5.4.0 是 Qt 官方开发环境安装的文件夹,
C:\Qt\Qt5.4.0\5.4\mingw491_32 是Qt类库的目录(QTDIR),
因此使用的 –qmldir 后面写的是 C:\Qt\Qt5.4.0\5.4\mingw491_32\qml
读者Qt环境安装路径不一样,要根据实际情况修改!

然后可以看到 D:\helloqml 文件夹里有一大堆文件,就是 QtQuick程序需要的依赖文件。
将整个 D:\helloqml 文件夹 打包就可以发布出去,在别的电脑上使用。

这个 D:\helloqml 文件夹里的东西很多,看不懂就不要删,老老实实打包发布就行了。

上面是最简单的程序发布,实际复杂程序可能还带一些图片文件、数据库文件、配置文件之类的,可以按自己需要添加这些文件到发布文件夹里面。

qt 5.x初探 (3)

update3:

终于知道了正确的学习姿势…

用百度把要用的东西大概描述出来,然后总能找到一个是你要的。。。

然后再去搜关键词。。。

嗯。。百度还是很有用的啊2333

qt5.8_doc_Line Edits Example

所以现在要把之前写成dialog的几个改回Line edit

 

update2:

老师说要把输入框中的东西随时选中复制出来check…

QLabel默认好像不具有这种属性啊?

稍微查了下。。。

查到了一个叫setTextInteractionFlags的属性

以及连根拔出了。。

qt5.8 QGraphicsTextItem Class

 

找到了解决办法。。。

记得要

 

update1:

扶起。。。QFile读中文路径文件毫无问题。。。

换成了cpp的 ifstream就一直报错。。。

由于我还改了其他部分。。。所以。。。

查了好久才发现是ifstream的锅。。。。

 

 

 

把des放了进去。。。

本来加密和解密想就用一个函数用参数调节的。。。

不过看了半天也没太懂。。。这种connnet怎么写。。。

不过对connect的理解更深了一些。。。

信号和槽果然是qt的精髓。。。看起来还算不那么无聊。。。

放一些关于信号和槽的资料好了。。。

信号与槽机制

ibm_qt的信号与槽机制

qt的信号槽

 

然后目前的进度是。。。

des放了进去。。。加密基本没啥问题。。。

但是有个小问题。。。

对于加密过程。。。我是用了一个全局的QString QTextSt来传递信息。。。

对于打开文件。。。过程是file->QString

加密后得到密文文件。。过程是QString -> file

但是解密过程。。。。完全反过来了啊。。。?

在思考怎么写在一起能够不违和。。。。。

 

 

 

qt 5.x 学习笔记 (2)

先来放一波过程中用到的资料和官方文档好了。

basic layout_qt5.8

QBoxLayout Class_qt5.8

QString Class 5.8

QChar Class qt 5.8

Standard Dialogs Example qt 5.8

更新的部分还是放在最前面好了。。。

convert from QString to char *的时候有个坑。。。

In order to convert a QString to a char*, then you first need to get a latin1 representation of the string by calling toLatin1() on it which will return a QByteArray. Then call data() on the QByteArray to get a pointer to the data stored in the byte array. See the documentation:
See the following example for a demonstration:

举个栗子。。。。

Note that it is necessary to store the bytearray before you call data() on it, a call like the following
const char *c_str2 = str2.toLatin1().data();
will make the application crash as the QByteArray has not been stored and hence no longer exists.

 

 

 

 

继续阅读“qt 5.x 学习笔记 (2)”

qt 5.x 初探(1)

嘛。。为了系统安全课来学一波qt…

现在算是写出了一个可以打开文件,保存文件的记事本。。。

接下来要搞定的事情是。。。如何写一个自定义的事件。。。比如计算个开方之类的。。。

放一波代码好了。。。

 

大概看了一下午。。。这东西看起来虽然说完全没难度。。。但是还是很麻烦啊。。。

代码

 

 

软件体系结构复习笔记