opencv gocv    2020-09-21 21:31:56    578    0    0

最近在研究通过golang调用摄像头,按照 https://gocv.io/ 介绍进行安装,期间各种问题。。。

一、网站打不开

包括但不限于:

aomedia.googlesource.com , gist.githubusercontent.com, raw.githubusercontent.com 等网站
解决方法:
1、查询网站IP 获取其IP地址,然后修改系统 hosts 文件
2、直接全局代理。

macOS下修改 ~/.bash_profile ,增加:

  1. # 代理地址根据自己情况修改
  2. alias proxy='export all_proxy=socks5://127.0.0.1:50237'
  3. alias unproxy='unset all_proxy'

运行 brew install opencv 前,先 proxy 一下

二、系统不匹配

我的苹果本是 Sierra 系统,好不容易一步步下载完成要进行安装了,结果提示不支持 Sierra ,还友情提示不要去提问为什么......不支持你早说啊,等什么都准备好了才说……
么得办法,先升级系统到 Catalina 。。。
升级之后,重新开始下载(两个系统对应的包不一样)。

漫长的等待之后,安装时提示 xcode 过老……那就升级 xcode 吧,可是 AppStore 总是提示系统空间不足,无法安装。。。只能忍痛删掉好多东西。。。差不多空出 40G 的时候,终于可以安装了。

安装 xcode之后,重新执行安装命令,可算是成功了。

三、部分示例无法运行

运行示例里的 capwindow ,终于能看到画面了。可是有几个示例总是运行不起来,提示:
```
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: OpenCV(4.4.0) /tmp/opencv-20200909-20320-7icpjn/opencv-4.4.0/modules/dnn/src/dnn.cpp:321: error: (-215:Assertion f

排序    2020-06-17 09:43:59    238    0    0
  1. // 冒泡排序
  2. func bubbleSort(nums []int) {
  3. size := len(nums)
  4. for i := 0; i < size - 1; i++ {
  5. for j := i + 1; j < size; j++ {
  6. if nums[j] < nums[i] {
  7. nums[i], nums[j] = nums[j], nums[i]
  8. }
  9. }
  10. }
  11. }
  12. // 选择排序
  13. func selectSort(nums []int) {
  14. size := len(nums)
  15. idx := 0
  16. for i := 0; i < size - 1; i++ {
  17. idx = i
  18. for j := i + 1; j < size; j++ {
  19. if nums[j] < nums[idx] {
  20. idx = j
  21. }
  22. }
  23. if idx != i {
  24. nums[i], nums[idx] = nums[idx], nums[i]
  25. }
  26. }
  27. }
  28. // 快速排序
  29. func quickSort(nums []int, left, right int) {
  30. tmp := nums[left]
  31. i, j := left, right
  32. for i < j {
  33. for i < j && nums[j] >= tmp {
  34. j--
  35. }
  36. nums[i] = nums[j]
  37. for i < j && nums[i] <= tmp {
  38. i++
  39. }
  40. nums[j] = nums[i]
  41. }
  42. nums[i] = tmp
  43. if i > left + 1 {
  44. quickSort(nums, left, i - 1)
  45. }
electron    2019-07-31 20:54:20    367    0    0

按照官方文档进行操作,执行 npm start 时提示不明白 start 是什么操作,在package.json内添加 start 定义:

  1. "scripts": {
  2. "start": "electron ."
  3. }

再次尝试,哒哒~成功

然后页面上各个版本信息显示不出来,比较官方demo,创建窗口时需要设置preload.js:

  1. win = new BrowserWindow({
  2. width: 800,
  3. height: 600,
  4. webPreferences: {
  5. preload: path.join(__dirname, 'preload.js')
  6. }
  7. });

preload.js 文件内容:

  1. // All of the Node.js APIs are available in the preload process.
  2. // It has the same sandbox as a Chrome extension.
  3. window.addEventListener('DOMContentLoaded', () => {
  4. const replaceText = (selector, text) => {
  5. const element = document.getElementById(selector)
  6. if (element) element.innerText = text
  7. }
  8. for (const type of ['chrome', 'node', 'electron']) {
  9. replaceText(`${type}`, process.versions[type])
  10. }
  11. })

index.html 文件增加标签id:

  1. We are using node <span id="node"></span>,
  2. Chrome <span id="chrome"></span>,
  3. and Electron <span id="electron"></span>.

再次执行,显示成功。

title

算法 二分查找    2018-12-20 20:22:00    258    0    0
  1. //二分查找,data为由小到大排序的数组,target为要找的目标值
  2. func BinarySearch(data []int, target int) int {
  3. min := 0
  4. max := len(data)
  5. for min <= max {
  6. cur := (min + max) / 2
  7. println(min, cur, max, target, data[cur])
  8. if target == data[cur] {
  9. return cur
  10. } else if target < data[cur] {
  11. max = cur - 1
  12. } else {
  13. min = cur + 1
  14. }
  15. }
  16. return -1
  17. }