树莓派opencv错误AttributeError: 'cv2.face_LBPHFaceRecognizer' object has no attribute 'read'?

树莓派3B+上进行opencv人脸识别代码调试遇到错误AttributeError: 'cv2.face_LBPHFaceRecognizer' object has no attribute 'read'
以下是部分出错代码段:

import cv2

import numpy as np

import os

recognizer = cv2.face.createLBPHFaceRecognizer()

recognizer.read('/home/pi/facechack/face_image/trainer/trainer.yml')

cascadePath = "/home/pi/facechack/haarcascades/haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascadePath);


1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
树莓派编译opencv出现Genetating error: constant l_MAGIC_VAL(cname=cv::l::MAGIC_VAL)already exists
树莓派安装opencv进行make时,出现 generator error: constant l MAGIC VAL (cname=cv: : l: :MAGIC VAL already exists make[2]: [modules/ python3/CMakeFi Les/opencv python3. dir /build . make:159 : modules/ python3/ pyopencv generated include.h]错误255 make[1]: [CMakeFiles/Makefile2:3981 : modules/ python3/cMakeFiles/ opencv python3.dir/all]错误2ake: 变[Makefile:163: all]错误2 求教解决办法,感谢!
OPencv使用下cvtColor 出错
环境:树莓派3 raspberry 代码片段: import cv2 import numpy as np cap = cv2.VideoCapture(0) faceCasecade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") while(True): ret,frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiscale( gray, scaleFactor=1.2, minNeighbors = 5, minSize = (30, 30) ) print("Found {0} faces!".format(len(faces))) for(x, y, w, h) in faces: cv2.rectangele(frame,(x,y),(x+w,y+h),(0,255,0),2) cv.inshow('frame',frame) if cv2.waitKey(1)& 0xFF ==ord('q'): break cap.release() cv2.destroyAllwindows() 报错: Traceback (most recent call last): File "/home/pi/Desktop/OPenCV/live.py", line 11, in <module> gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(3.4.3) /home/pi/opencv-3.4.3/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor' 如何解决
关于OpenCV accumulateWeighted更新背景的问题
用树莓派写了个判断遮挡的程序,然后背景在未被遮挡时进行实时更新, 现在会出现程序在已经被判断为遮挡的情况下更新,求解是什么问题。 代码如下: contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours: if cv2.contourArea(c) < 15000: if cv2.contourArea(c) < 100: print(time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()) + '更新完毕') cv2.accumulateWeighted(gray, background, 0.5) continue else: print(time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()) + '被遮挡') 现在就是本来应该在contourArea 小于 100时才会更新,但是现在会出现>15000的时候进行更新
使用RC522写入block 0,写特殊指令0x40和0x43时超时。
使用树莓派SPI驱动RC522模块,读取block 0数据成功,但是写入block 0失败。参照网上资料,写入block 0前需要先写入两个特殊指令0x40和0x43,但是当我通过调用函数 ``` MFRC522_WriteReg(BitFramingReg, 0x07) MFRC522_ToCard(PCD_TRANSCEIVE, 0x40) //0x40 MFRC522_WriteReg(BitFramingReg, 0x00) MFRC522_ToCard(PCD_TRANSCEIVE, 0x43) //0x43 ``` 写入这两个命令时总是报错超时失败。但是其他request,select等流程调用 这两个函数都能成功,是在不知哪里有问题。怀疑是不是买的卡片不支持写入block 0,但是买的时候确实说是支持的。 下面是具体代码: ``` RC522.py: import RPi.GPIO as GPIO import spi import signal import time class MFRC522: PCD_IDLE = 0x00 # cancel current command PCD_AUTHENT = 0x0E # authent PCD_RECEIVE = 0x08 # receive data PCD_TRANSMIT = 0x04 # send data PCD_TRANSCEIVE = 0x0C # send & receive data PCD_RESETPHASE = 0x0F # reset PCD_CALCCRC = 0x03 # CRC calculate PICC_REQIDL = 0x26 # detect cards, not slepp PICC_REQALL = 0x52 # detect cards, all PICC_ANTICOLL = 0x93 # anti collision PICC_SElECTTAG = 0x93 # select card PICC_AUTHENT1A = 0x60 # authent A PICC_AUTHENT1B = 0x61 # authent B PICC_READ = 0x30 # read block PICC_WRITE = 0xA0 # write block PICC_DECREMENT = 0xC0 # dec money PICC_INCREMENT = 0xC1 # inc money PICC_RESTORE = 0xC2 # send data to buf PICC_TRANSFER = 0xB0 # save date from buf PICC_HALT = 0x50 # idle status Reserved00 = 0x00 # register CommandReg = 0x01 CommIEnReg = 0x02 DivlEnReg = 0x03 CommIrqReg = 0x04 DivIrqReg = 0x05 ErrorReg = 0x06 Status1Reg = 0x07 Status2Reg = 0x08 FIFODataReg = 0x09 FIFOLevelReg = 0x0A WaterLevelReg = 0x0B ControlReg = 0x0C BitFramingReg = 0x0D CollReg = 0x0E Reserved01 = 0x0F Reserved10 = 0x10 ModeReg = 0x11 TxModeReg = 0x12 RxModeReg = 0x13 TxControlReg = 0x14 TxAutoReg = 0x15 TxSelReg = 0x16 RxSelReg = 0x17 RxThresholdReg = 0x18 DemodReg = 0x19 Reserved11 = 0x1A Reserved12 = 0x1B MifareReg = 0x1C Reserved13 = 0x1D Reserved14 = 0x1E SerialSpeedReg = 0x1F Reserved20 = 0x20 CRCResultRegM = 0x21 CRCResultRegL = 0x22 Reserved21 = 0x23 ModWidthReg = 0x24 Reserved22 = 0x25 RFCfgReg = 0x26 GsNReg = 0x27 CWGsPReg = 0x28 ModGsPReg = 0x29 TModeReg = 0x2A TPrescalerReg = 0x2B TReloadRegH = 0x2C TReloadRegL = 0x2D TCounterValueRegH = 0x2E TCounterValueRegL = 0x2F Reserved30 = 0x30 TestSel1Reg = 0x31 TestSel2Reg = 0x32 TestPinEnReg = 0x33 TestPinValueReg = 0x34 TestBusReg = 0x35 AutoTestReg = 0x36 VersionReg = 0x37 AnalogTestReg = 0x38 TestDAC1Reg = 0x39 TestDAC2Reg = 0x3A TestADCReg = 0x3B Reserved31 = 0x3C Reserved32 = 0x3D Reserved33 = 0x3E Reserved34 = 0x3F NRSTPD = 22 MAX_LEN = 18 MI_OK = 0 MI_NOTAGERR = 1 MI_ERR = 2 MI_TIMEOUT = 3 def __init__(self, dev='/dev/spidev0.0', spd=1000000): self.dev0 = spi.openSPI(device=dev, speed=spd) GPIO.setmode(GPIO.BOARD) GPIO.setup(self.NRSTPD, GPIO.OUT) GPIO.output(self.NRSTPD, 1) self.MFRC522_Init() def MFRC522_WriteReg(self, addr, val): spi.transfer(self.dev0, ((addr<<1)&0x7E, val)) def MFRC522_ReadReg(self, addr): val = spi.transfer(self.dev0, (((addr<<1)&0x7E) | 0x80, 0)) return val[1] def MFRC522_SetRegBitMask(self, reg, mask): tmp = self.MFRC522_ReadReg(reg) self.MFRC522_WriteReg(reg, tmp | mask) def MFRC522_ClearRegBitMask(self, reg, mask): tmp = self.MFRC522_ReadReg(reg) self.MFRC522_WriteReg(reg, tmp & (~mask)) def MFRC522_ToCard(self, command, sendData): retStatus = self.MI_OK backData = [] backLen = 0 irqEn = 0x00 waitIRq = 0x00 lastBits = None n = 0 i = 0 if command == self.PCD_AUTHENT: irqEn = 0x12 waitIRq = 0x10 if command == self.PCD_TRANSCEIVE: irqEn = 0x77 waitIRq = 0x30 self.MFRC522_WriteReg(self.CommIEnReg, irqEn|0x80) # enable interupt self.MFRC522_ClearRegBitMask(self.CommIrqReg, 0x80) # clear interupt flags self.MFRC522_SetRegBitMask(self.FIFOLevelReg, 0x80) # init FIFO self.MFRC522_WriteReg(self.CommandReg, self.PCD_IDLE) # cancel current command for i in range(len(sendData)): self.MFRC522_WriteReg(self.FIFODataReg, sendData[i]) self.MFRC522_WriteReg(self.CommandReg, command) if command == self.PCD_TRANSCEIVE: self.MFRC522_SetRegBitMask(self.BitFramingReg, 0x80) i = 2000 while True: n = self.MFRC522_ReadReg(self.CommIrqReg) i -= 1 if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)): break self.MFRC522_ClearRegBitMask(self.BitFramingReg, 0x80) if i != 0: if (self.MFRC522_ReadReg(self.ErrorReg) & 0x1B) == 0x00: if n & irqEn & 0x01: retStatus = self.MI_NOTAGERR if command == self.PCD_TRANSCEIVE: n = self.MFRC522_ReadReg(self.FIFOLevelReg) lastBits = self.MFRC522_ReadReg(self.ControlReg) & 0x07 if lastBits != 0: backLen = (n-1)*8 + lastBits else: backLen = n*8 if n == 0: n = 1 if n > self.MAX_LEN: n = self.MAX_LEN for i in range(n): backData.append(self.MFRC522_ReadReg(self.FIFODataReg)) else: retStatus = self.MI_ERR else: retStatus = self.MI_TIMEOUT return (retStatus, backData, backLen) def _CalulateCRC(self, indata): self.MFRC522_ClearRegBitMask(self.DivIrqReg, 0x04) self.MFRC522_SetRegBitMask(self.FIFOLevelReg, 0x80) for i in range(len(indata)): self.MFRC522_WriteReg(self.FIFODataReg, indata[i]) self.MFRC522_WriteReg(self.CommandReg, self.PCD_CALCCRC) i = 255 while True: n = self.MFRC522_ReadReg(self.DivIrqReg) i -= 1 if ~((i != 0) and ~(n&0x04)): break crc = [] crc.append(self.MFRC522_ReadReg(self.CRCResultRegL)) crc.append(self.MFRC522_ReadReg(self.CRCResultRegM)) return crc # function : read block # parameter : blockAddr(0~63) # return : retStatus # backData[16] def MFRC522_ReadBolock(self, blockAddr): retStatus = self.MI_OK # cmd: 0x0c # buf: 0x30 blockAddr crc[2] buf = [] buf.append(self.PICC_READ) buf.append(blockAddr) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 8*self.MAX_LEN): retStatus = self.MI_ERR return (retStatus, backData) # function : write block # parameter : blockAddr(0~63) # writeData[16] # return : retStatus def MFRC522_WriteBlock(self, blockAddr, writeData): retStatus = self.MI_OK # cmd: 0x0c # buf: 0xA0 blockAddr crc[2] buf = [] buf.append(self.PICC_WRITE) buf.append(blockAddr) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or ((backData[0]&0x0F) != 0x0A) or (backLen != 4): retStatus = self.MI_ERR if status == self.MI_OK: # cmd: 0x0c # buf: writeData[16] crc[2] buf2 = [] for i in range(16): buf2.append(writeData[i]) crc = self._CalulateCRC(buf2) buf2.append(crc[0]) buf2.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf2) if (status != self.MI_OK) or ((backData[0]&0x0F) != 0x0A) or (backLen != 4): retStatus = self.MI_ERR return retStatus def MFRC522_Init(self): self.MFRC522_Reset() self.MFRC522_WriteReg(self.TModeReg, 0x8D) self.MFRC522_WriteReg(self.TPrescalerReg, 0x3E) self.MFRC522_WriteReg(self.TReloadRegL, 30) self.MFRC522_WriteReg(self.TReloadRegH, 0) self.MFRC522_WriteReg(self.TxAutoReg, 0x40) self.MFRC522_WriteReg(self.ModeReg, 0x3D) self.MFRC522_AntennaOn() def MFRC522_Reset(self): # reg: 0x01 # buf: 0x0F self.MFRC522_WriteReg(self.CommandReg, self.PCD_RESETPHASE) def MFRC522_AntennaOn(self): # reg: 0x14 # buf: 0bxxxxxx11 temp = self.MFRC522_ReadReg(self.TxControlReg) if not(temp & 0x03): self.MFRC522_SetRegBitMask(self.TxControlReg, 0x03) def MFRC522_AntennaOff(self): # reg: 0x14 # buf: 0bxxxxxx00 self.MFRC522_ClearRegBitMask(self.TxControlReg, 0x03) # function : detect card # parameter : reqMode: detect mode # 0x52 = detect all cards # 0x26 = detect not sleep cards # return : retStatus # backData: card type, 2 bytes # 0x4400 = Mifare_UltraLight # 0x0400 = Mifare_One(S50) # 0x0200 = Mifare_One(S70) # 0x0800 = Mifare_Pro(X) # 0x4403 = Mifare_DESFire def MFRC522_Request(self, reqMode): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x07) # cmd: 0x0c # buf: 0x26/0x52 buf = [] buf.append(reqMode) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 0x10): retStatus = self.MI_ERR return (retStatus, backData) # function : anticoll # parameter : # return : retStatus # backData(Uid, 4 bytes) def MFRC522_Anticoll(self): retStatus = self.MI_OK serNumCheck = 0 self.MFRC522_WriteReg(self.BitFramingReg, 0x00) # cmd: 0x0c # buf: 0x93 0x20 buf = [] buf.append(self.PICC_ANTICOLL) buf.append(0x20) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status==self.MI_OK) and (len(backData)==5): for i in range(4): serNumCheck ^= backData[i] if serNumCheck != backData[4]: retStatus = self.MI_ERR else: retStatus = self.MI_ERR return (retStatus, backData) # function : select card # parameter : Uid # return : retStatus def MFRC522_Select(self, Uid): retStatus = self.MI_OK serNumCheck = 0 # cmd: 0x0c # buf: 0x93 0x70 Uid[4] check crc[2] buf = [] buf.append(self.PICC_SElECTTAG) buf.append(0x70) for i in range(4): buf.append(Uid[i]) serNumCheck ^= Uid[i] buf.append(serNumCheck) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 0x18): retStatus = self.MI_ERR return retStatus # function : auth sectorkey # parameter : authMode(PICC_AUTHENT1A/PICC_AUTHENT1B) # blockAddr # sectorkey(6 bytes) # Uid(4 bytes) # return : retStatus def MFRC522_Auth(self, authMode, blockAddr, sectorkey, Uid): retStatus = self.MI_OK # cmd: 0x0e # buf: authMode blockAddr sectorkey[6] Uid[4] buf = [] buf.append(authMode) buf.append(blockAddr) for i in range(6): buf.append(sectorkey[i]) for i in range(4): buf.append(Uid[i]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_AUTHENT, buf) if (status != self.MI_OK) or not(self.MFRC522_ReadReg(self.Status2Reg)&0x08): retStatus = self.MI_ERR return retStatus # function : idle # parameter : # return : retStatus def MFRC522_Halt(self): retStatus = self.MI_OK # cmd: 0x0c # buf: 0x50 0x00 crc[2] buf = [] buf.append(self.PICC_HALT) buf.append(0) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) retStatus = status return retStatus def MFRC522_WriteCmd40(self): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x07) # cmd: 0x0c # buf: 0x40 buf = [] buf.append(0x40) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backData[0] != 0x0a): retStatus = status return retStatus def MFRC522_WriteCmd43(self): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x00) # cmd: 0x0c # buf: 0x43 buf = [] buf.append(0x43) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backData[0] != 0x0a): retStatus = status return retStatus def MFRC522_StopCrypto1(self): self.MFRC522_ClearRegBitMask(self.Status2Reg, 0x08) def MFRC522_CloseSPI(self): spi.closeSPI(self.dev0) main.py: import RPi.GPIO as GPIO import MFRC522 import signal rc = MFRC522.MFRC522() dataBlock0 = [0x65, 0xa0, 0x8a, 0xe1, 0xae, 0x08, 0x04, 0x00, 0x01, 0x69, 0x21, 0x1a, 0x3c, 0xeb, 0xa9, 0x1d] sectorkey = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff] def read_block0(): (status, tagType) = rc.MFRC522_Request(rc.PICC_REQIDL) if status != rc.MI_OK: print("MFRC522_Request error") return print("MFRC522_Request success, tagType: %#x %#x" %(tagType[0], tagType[1])) (status, Uid) = rc.MFRC522_Anticoll() if status != rc.MI_OK: print("MFRC522_Anticoll error") return print("MFRC522_Anticoll success, Uid: %#x %#x %#x %#x" %(Uid[0], Uid[1], Uid[2], Uid[3])) status = rc.MFRC522_Select(Uid) if status != rc.MI_OK: print("MFRC522_Select error") return print("MFRC522_Select success") status = rc.MFRC522_Auth(rc.PICC_AUTHENT1A, 1, sectorkey, Uid) if status != rc.MI_OK: print("MFRC522_Auth error") return print("MFRC522_Auth success") (status, dataBlock0) = rc.MFRC522_ReadBolock(0) if status != rc.MI_OK: print("MFRC522_ReadBolock error") return print("MFRC522_ReadBolock success, block0: %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x" %(dataBlock0[0], dataBlock0[1], dataBlock0[2], dataBlock0[3], dataBlock0[4], dataBlock0[5], dataBlock0[6], dataBlock0[7], dataBlock0[8], dataBlock0[9], dataBlock0[10], dataBlock0[11], dataBlock0[12], dataBlock0[13], dataBlock0[14], dataBlock0[15])) rc.MFRC522_StopCrypto1() def write_block0(): (status, tagType) = rc.MFRC522_Request(rc.PICC_REQIDL) if status != rc.MI_OK: print("MFRC522_Request error") return print("MFRC522_Request success, tagType: %#x %#x" %(tagType[0], tagType[1])) (status, Uid) = rc.MFRC522_Anticoll() if status != rc.MI_OK: print("MFRC522_Anticoll error") return print("MFRC522_Anticoll success, Uid: %#x %#x %#x %#x" %(Uid[0], Uid[1], Uid[2], Uid[3])) status = rc.MFRC522_Select(Uid) if status != rc.MI_OK: print("MFRC522_Select error") return print("MFRC522_Select success") status = rc.MFRC522_Halt() print("MFRC522_Halt %d" %status) status = rc.MFRC522_WriteCmd40() if (status != rc.MI_OK): print("MFRC522_ToCard 0x40 error, status:%d" %status) return print("MFRC522_ToCard 0x40 success") status = rc.MFRC522_WriteCmd43() if (status != rc.MI_OK): print("MFRC522_ToCard 0x43 error, status:%d" %status) return print("MFRC522_ToCard 0x43 success") status = rc.MFRC522_WriteBlock(0, dataBlock0) if status != rc.MI_OK: print("MFRC522_WriteBlock error") return print("MFRC522_WriteBlock success") rc.MFRC522_StopCrypto1() def closeSPI(): rc.MFRC522_CloseSPI() if __name__ == '__main__': while True: action = input("Enter action r/w: ") if action == 'r': read_block0() elif action == 'w': write_block0() elif action == 'q': closeSPI() break print("exit procedure") ``` 下面是执行解过,读取成功,但是写入报错超时: ![图片说明](https://img-ask.csdn.net/upload/201910/28/1572228464_990828.png)
树莓派opencv调用树莓派摄像头
在树莓派3上安装了opencv,用opencv去掉用usb接上的摄像头可以,但是不能获取树莓派的标准摄像头?应该怎么去设置
树莓派opencv调用cvShowImage("Original Image",img);会报错
我用的是VNC远程打开树莓派桌面,但是执行cvShowImage("Original Image",img);或cv2.imshow('image',img)就是报错,Xlib:extension "RANDR" missing on display ":1.0". GdkGLExt-WARNING **:Window system doesn't support OpenGL. 这个问题困扰我几天了,网上找的一些方法根本没法解决,还请大神帮帮忙,再次先谢过了!
想用树莓派做行人识别,不知道可以吗
先在树莓派上装c++版的opencv,用板子上的csi摄像头采集图像,然后用HOG特征和SVM来检测其中的行人。不知道树莓派算力够吗? 想把这个程序写进去。 ``` #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> using namespace std; using namespace cv; #define PosSamNO 1114 //正样本个数 #define NegSamNO 12180 //负样本个数 #define TRAIN true//是否进行训练,true表示重新训练,false表示读取xml文件中的SVM模型 #define CENTRAL_CROP false //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体 //HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。 //不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值 #define HardExampleNO 433 //继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数, //但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问 class MySVM : public CvSVM { public: //获得SVM的决策函数中的alpha数组 double * get_alpha_vector() { return this->decision_func->alpha; } //获得SVM的决策函数中的rho参数,即偏移量 float get_rho() { return this->decision_func->rho; } }; int main() { //检测窗口(64,128),块尺寸(16,16),块步长(8,8),cell尺寸(8,8),直方图bin个数9 HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的 int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定 MySVM svm;//SVM分类器 //若TRAIN为true,重新训练分类器 if(TRAIN) { string ImgName;//图片名(绝对路径) ifstream finPos("d:/hogmit/pos/pos.txt");//正样本图片的文件名列表 //ifstream finPos("PersonFromVOC2012List.txt");//正样本图片的文件名列表 ifstream finNeg("d:/hogmit/neg/neg.txt");//负样本图片的文件名列表 Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数 Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人 //依次读取正样本图片,生成HOG描述子 for(int num=0; num<PosSamNO && getline(finPos,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; //ImgName = "D:\\DataSet\\PersonFromVOC2012\\" + ImgName;//加上正样本的路径名 ImgName = "d:/hogmit/pos/" + ImgName;//加上正样本的路径名 Mat src = imread(ImgName);//读取图片 if(CENTRAL_CROP) src = src(Rect(16,16,64,128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素 //resize(src,src,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) // cout<<"描述子维数:"<<descriptors.size()<<endl; //处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat sampleFeatureMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, DescriptorDim, CV_32FC1); //初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,0表示无人 sampleLabelMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, 1, CV_32FC1); } //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num,i) = descriptors[i];//第num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num,0) = 1;//正样本类别为1,有人 } //依次读取负样本图片,生成HOG描述子 for(int num=0; num<NegSamNO && getline(finNeg,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/neg/" + ImgName;//加上负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO,0) = -1;//负样本类别为-1,无人 } //处理HardExample负样本 if(HardExampleNO > 0) { ifstream finHardExample("d:/hogmit/hard/hard.txt");//HardExample负样本的文件名列表 //依次读取HardExample负样本图片,生成HOG描述子 for(int num=0; num<HardExampleNO && getline(finHardExample,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/hard/" + ImgName;//加上HardExample负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO+NegSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO+NegSamNO,0) = -1;//负样本类别为-1,无人 } } //输出样本的HOG特征向量矩阵到文件 ofstream fout("d:/xlw/SampleFeatureMat.txt"); for(int i=0; i<PosSamNO+NegSamNO; i++) { fout<<i<<endl; for(int j=0; j<DescriptorDim; j++) { fout<<sampleFeatureMat.at<float>(i,j)<<" "; } fout<<endl; } //训练SVM分类器 //迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON); //SVM参数:SVM类型为C_SVC;线性核函数;松弛因子C=0.01 CvSVMParams param(CvSVM::C_SVC, CvSVM::LINEAR, 0, 1, 0, 0.01, 0, 0, 0, criteria); cout<<"开始训练SVM分类器"<<endl; double time0=static_cast<double>(getTickCount()); svm.train(sampleFeatureMat,sampleLabelMat, Mat(), Mat(), param);//训练分类器 time0=((double)getTickCount()-time0)/getTickFrequency(); cout<<"训练完成"<<endl; cout<<"训练花费时间:"<<time0<<endl; svm.save("d:/xlw/SVM_HOG_mit_inria(1114pos+12180neg+433hard).xml");//将训练好的SVM模型保存为xml文件 } else //若TRAIN为false,从XML文件读取训练好的分类器 { cout<<"fail train"<<endl; //svm.load("SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml");//从XML文件读取训练好的SVM模型 svm.load("d:/LBP/SVM_Model.xml"); } /************************************************************************************************* 线性SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho; 将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。 如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()), 就可以利用你的训练样本训练出来的分类器进行行人检测了。 ***************************************************************************************************/ DescriptorDim = svm.get_var_count();//特征向量的维数,即HOG描述子的维数 int supportVectorNum = svm.get_support_vector_count();//支持向量的个数 cout<<"支持向量个数:"<<supportVectorNum<<endl; Mat alphaMat = Mat::zeros(1, supportVectorNum, CV_32FC1);//alpha向量,长度等于支持向量个数 Mat supportVectorMat = Mat::zeros(supportVectorNum, DescriptorDim, CV_32FC1);//支持向量矩阵 Mat resultMat = Mat::zeros(1, DescriptorDim, CV_32FC1);//alpha向量乘以支持向量矩阵的结果 //将支持向量的数据复制到supportVectorMat矩阵中 for(int i=0; i<supportVectorNum; i++) { const float * pSVData = svm.get_support_vector(i);//返回第i个支持向量的数据指针 for(int j=0; j<DescriptorDim; j++) { //cout<<pData[j]<<" "; supportVectorMat.at<float>(i,j) = pSVData[j]; } } //将alpha向量的数据复制到alphaMat中 double * pAlphaData = svm.get_alpha_vector();//返回SVM的决策函数中的alpha向量 for(int i=0; i<supportVectorNum; i++) { alphaMat.at<float>(0,i) = pAlphaData[i]; } //计算-(alphaMat * supportVectorMat),结果放到resultMat中 //gemm(alphaMat, supportVectorMat, -1, 0, 1, resultMat);//不知道为什么加负号? resultMat = -1 * alphaMat * supportVectorMat; //得到最终的setSVMDetector(const vector<float>& detector)参数中可用的检测子 vector<float> myDetector; //将resultMat中的数据复制到数组myDetector中 for(int i=0; i<DescriptorDim; i++) { myDetector.push_back(resultMat.at<float>(0,i)); } //最后添加偏移量rho,得到检测子 myDetector.push_back(svm.get_rho()); cout<<"检测子维数:"<<myDetector.size()<<endl; //设置HOGDescriptor的检测子 HOGDescriptor myHOG; myHOG.setSVMDetector(myDetector); //myHOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //保存检测子参数到文件 ofstream fout("d:/xlw/HOGDetectorForOpenCV.txt"); for(int i=0; i<myDetector.size(); i++) { fout<<myDetector[i]<<endl; } /**************读入图片进行HOG行人检测******************/ Mat src = imread("d:/timg.png"); //Mat src = imread("2007_000423.jpg"); //Mat src = imread("1.png"); vector<Rect> found, found_filtered;//矩形框数组 cout<<"进行多尺度HOG人体检测"<<endl; myHOG.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2);//对图片进行多尺度行人检测 //src为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离; //参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例; //参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。 cout<<"找到的矩形框个数:"<<found.size()<<endl; //找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中 for(int i=0; i < found.size(); i++) { Rect r = found[i]; int j=0; for(; j < found.size(); j++) if(j != i && (r & found[j]) == r) break; if( j == found.size()) found_filtered.push_back(r); } //画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整 for(int i=0; i<found_filtered.size(); i++) { Rect r = found_filtered[i]; r.x += cvRound(r.width*0.1); r.width = cvRound(r.width*0.8); r.y += cvRound(r.height*0.07); r.height = cvRound(r.height*0.8); rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3); } imwrite("d:/SVM/ImgProcessed3.jpg",src); namedWindow("src",0); imshow("src",src); waitKey();//注意:imshow之后必须加waitKey,否则无法显示图像 /******************读入单个64*128的测试图并对其HOG描述子进行分类*********************/ ////读取测试图片(64*128大小),并计算其HOG描述子 //Mat testImg = imread("person014142.jpg"); //Mat testImg = imread("noperson000026.jpg"); //vector<float> descriptor; //hog.compute(testImg,descriptor,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //Mat testFeatureMat = Mat::zeros(1,3780,CV_32FC1);//测试样本的特征向量矩阵 //将计算好的HOG描述子复制到testFeatureMat矩阵中 //for(int i=0; i<descriptor.size(); i++) // testFeatureMat.at<float>(0,i) = descriptor[i]; //用训练好的SVM分类器对测试图片的特征向量进行分类 //int result = svm.predict(testFeatureMat);//返回类标 //cout<<"分类结果:"<<result<<endl; system("pause"); } ```
python通过http传输文件及数据
一个检测系统,三台树莓派采集环境变量及拍照后将环境变量数据和照片发送至服务器,正常运行了半个多月后服务器忽然收不到数据了,调试后发现是因为树莓派无法正常发送照片,重新启动服务器上接收照片的程序后又正常了,不知道问题产生的原因是什么 以下是服务器上接收照片的程序 #--coding:utf8-- from BaseHTTPServer import BaseHTTPRequestHandler import mysql.connector import cgi class PostHandler(BaseHTTPRequestHandler): def do_POST(self): form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], } ) self.send_response(200) self.end_headers() self.wfile.write('Client: %sn ' % str(self.client_address) ) self.wfile.write('User-agent: %sn' % str(self.headers['user-agent'])) self.wfile.write('Path: %sn'%self.path) self.wfile.write('Form data:n') for field in form.keys(): field_item = form[field] filename = field_item.filename filevalue = field_item.value filesize = len(filevalue)#文件大小(字节) print len(filevalue) with open(filename.decode('utf-8'),'wb') as f: f.write(filevalue) return if __name__=='__main__': from BaseHTTPServer import HTTPServer sever = HTTPServer(('0.0.0.0',8002),PostHandler) print 'Starting server, use <Ctrl-C> to stop' sever.serve_forever() 以下是树莓派发送图片的程序,树莓派上运行的主程序通过调用postpic来发送照片 #coding=utf-8 import requests #hello函数用于测试模块调用是否成功 def pichello(): print "hello pic" def postpic(path): url='http://......:8002' files={'file':open(path,'rb')} try: r=requests.post(url,files=files) return 1 except: return 0 if __name__=="__main__": path = '/home/pi/LowVoltageRoom/PythonHTTPPic/test.jpg' postpic(path) 我猜想可能是多台设备同时发送照片导致数据阻塞引起的,我尝试在一台设备发送照片未结束时另一台同时发送,结果都成功了。现在系统运行正常,不知道什么时候会再出问题,求各路大神帮忙分析一下问题出现的原因
在树莓派中执行QT程序提示QXcbConnection: Could not connect to display :0.0 Aborted
QT程序是把程序拷进树莓派编译运行的,我使用的xshell远程连接树莓派执行出错的,外接键盘到树莓派执行也是一样的问题,请各位大佬指教
有关树莓派中MySQL访问的问题?
遇到一个问题: 在树莓派中建了一个MySQL数据库,然后在访问的时候就遇到了问题,如果是和一台共享网络的电脑,则在设置好账号,密码和IP地址之后该电脑可以执行java 程序来访问数据库中的数据,但是如果树莓派没有和电脑用网线直连,则这台电脑就不能访问了数据库,并且会出现以下的错误: Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at Connectingmysql.main(Connectingmysql.java:40) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at java.net.Socket.<init>(Socket.java:434) at java.net.Socket.<init>(Socket.java:244) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) ... 15 more 这个是报错之后的异常,程序本身是没有问题的,设置断点后发现是conn = DriverManager.getConnection(url, user, password);这条语句出错,就是未成功建立连接,不知道是什派中的
树莓派命令行中调用找不到dark flow,但打开python环境后单独运行dark flow就没问题,为什么?
python /home/pi/Desktop/mobile_detector-master/detect.py/home/pi/.virtualenvs/cv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5 return f(*args, **kwds) /home/pi/.virtualenvs/cv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompatibility. Expected 432, got 412 return f(*args, **kwds) Traceback (most recent call last): File "/home/pi/Desktop/mobile_detector-master/detect.py", line 11, in <module> from yolo_darfklow import YOLODarkflowDetector File "/home/pi/Desktop/mobile_detector-master/yolo_darfklow.py", line 1, in <module> from darkflow.net.build import TFNet **_ImportError: No module named 'darkflow'_** (cv) pi@raspberrypi:~/darknet/darkflow $ python Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from darkflow.net.build import TFNet /home/pi/.virtualenvs/cv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5 return f(*args, **kwds) /home/pi/.virtualenvs/cv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompat
树莓派将SSE转化成NEON报错
在sse.h里面加了sse2neon.h,编译的时候报错 arm_neon.h: In function '__m128 _mm_set1_ps(float)': arm_neon.h:error: inlining failed in call to always_inline 'float32×4_t vdupq_n_f32(float32_t)':target specific option mismatch vdupq_n_f32(float32_t __a) sse2neon.h:155:4: note: called from here (×) sse2neon.h:324:9: note: in expansion of macro 'vreinterpretq_m128_f32' return vreinterpretq_m128_f32(vdupq_n_f32(_w));
各位树莓派和Docker的dalao都来看看,怎么装迅雷?
我想在树莓派上装迅雷,只找到几篇老文章,试着照做,只能做到这样: ![图片说明](https://img-ask.csdn.net/upload/201912/26/1577375180_315693.png) 执行./portal说找不到命令。 请问我是哪里做错了?
树莓派中安装的sqlite数据库,通过jdbc连接失败
代码相同,在windows平台运行可以通过,在树莓派中可以编译但运行报错,是不是因为arm板的原因 代码如下: import java.sql.*; import org.sqlite.JDBC; public class Demo { public static void main(String[] args) { try { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:bmdb.db"); Statement stat = conn.createStatement(); //stat.executeUpdate( "create table table1(name varchar(64), age int);" ); // stat.executeUpdate( "insert into item values(1,'a',1,'a',1);" ); // stat.executeUpdate( "insert into item values(2,'b',2,'b',2);" ); // stat.executeUpdate( "insert into item values(3,'c',3,'c',3);" ); ResultSet rs = stat.executeQuery("select * from item;"); while (rs.next()) { System.out.print("i_name = " + rs.getString("i_name") + " "); System.out.println("age = " + rs.getString("i_id")); } rs.close(); conn.close(); } catch( Exception e ) { e.printStackTrace ( ); } } } 运行结果: java.sql.SQLException: Error opening connection at org.sqlite.core.CoreConnection.open(CoreConnection.java:140) at org.sqlite.core.CoreConnection.<init>(CoreConnection.java:66) at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:21) at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:23) at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:45) at org.sqlite.JDBC.createConnection(JDBC.java:114) at org.sqlite.JDBC.connect(JDBC.java:88) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:270) at Demo.main(Demo.java:9) Caused by: java.lang.Exception: No native library is found for os.name=Linux and os.arch=arm at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:284) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:65) at org.sqlite.core.NativeDB.load(NativeDB.java:53) at org.sqlite.core.CoreConnection.open(CoreConnection.java:136) ... 9 more
win10家庭版连接树莓派远程桌面失败。
连接树莓派使用mstsc,输入以后显示“由于协议错误,会话将终止。” 已经换了win10默认主题,但是依然会出现错误。 用户名:pi.密码为发布镜像的人设置的密码。 在网上寻找了很多答案,但是大多数都是windows界面出现问题时候的方案。至于 linux或者树莓派,就没有什么解决方案。 小白请大家不吝赐教!
请问下,树莓派的SPi如何设置成从机模式?
好像树莓派默认的SPI只能是主机模式,设置成从机要从哪里下手呢,求教。
树莓派与Android的一个简单问题,本人小白,解决不了了,求大神帮助!!!
# mainactivity ``` package com.example.rasberrypi; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Handler; import android.os.Message; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import org.json.JSONException; import org.json.JSONObject; import java.util.TimerTask; public class MainActivity extends Activity { private Handler mHandler; private TextView fire, people; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler = new Handler(); mHandler.post(new TimerProcess()); fire = findViewById(R.id.fire); people = findViewById(R.id.people); } @SuppressLint("HandlerLeak") final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { String ret = msg.obj.toString(); switch (msg.what){ case 1: StringBuilder builder = new StringBuilder(); JSONObject jsonObject = null; try { jsonObject = new JSONObject(ret); Log.i("json", ""+jsonObject); if (jsonObject.getInt("isFire") == 0) { fire.setText("没有发现火焰"); fire.setTextColor(android.graphics.Color.GREEN); } else { fire.setText("发现火焰"); fire.setTextColor(android.graphics.Color.RED); mes("火焰传感器探测到火焰!"); } if (jsonObject.getInt("isInvaded") == 0) { people.setText("安全"); people.setTextColor(android.graphics.Color.GREEN); } else { people.setText("发现入侵者"); people.setTextColor(android.graphics.Color.RED); mes("发现有人进入房间!"); } } catch (JSONException e) { e.printStackTrace(); } break; default: break; } } }; private void getDevInformation(){ new Thread(new Runnable() { @Override public void run() { String ret = Webconn.getDev(); System.out.println("get return:"); System.out.println(ret); handler.sendMessage(handler.obtainMessage(1, ret)); } }).start(); } private class TimerProcess implements Runnable{ @Override public void run() { mHandler.postDelayed(this, 5000); getDevInformation(); } } private void mes(String m) { String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); Notification.Builder builder = new Notification.Builder(MainActivity.this); builder.setSmallIcon(R.mipmap.ic_launcher); //设置图标 builder.setTicker("显示第二个通知"); builder.setContentTitle("树莓派安防"); //设置标题 builder.setContentText(m); //消息内容 builder.setWhen(System.currentTimeMillis()); //发送时间 builder.setDefaults(Notification.DEFAULT_ALL); //设置默认的提示音,振动方式,灯光 builder.setAutoCancel(true);//打开程序后图标消失 /*空一句*/ Intent intent = new Intent(MainActivity.this,Activity.class); PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 0, intent, 0); builder.setContentIntent(pendingIntent); Notification notification = builder.build(); mNotificationManager.notify(1, notification); } } ``` # webconn ``` package com.example.rasberrypi; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Webconn { public static String getDev(){ String url = "http://192.168.1.104:5000/state/"; try { URL url1 = new URL(url); HttpURLConnection urlConnection =(HttpURLConnection) url1.openConnection(); int code = urlConnection.getResponseCode(); if(code == 200){ String strResult = urlConnection.getResponseMessage(); System.out.println(strResult); return strResult; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "null"; } } ``` # activity_main ``` <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.rasberrypi.MainActivity"> <TextView android:id="@+id/fire" android:layout_width="297dp" android:layout_height="95dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.135" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.225" /> <TextView android:id="@+id/people" android:layout_width="300dp" android:layout_height="88dp" tools:ignore="MissingConstraints" tools:layout_editor_absoluteX="10dp" tools:layout_editor_absoluteY="236dp" /> </android.support.constraint.ConstraintLayout> ``` 这里是代码,但是我的运行结果是空白图 ![图片说明](https://img-ask.csdn.net/upload/201802/21/1519186237_346292.png) Android studio中说 mainactivity中间的 jsonObject = new JSONObject(ret); String ret = Webconn.getDev(); 和webconn中的 int code = urlConnection.getResponseCode(); 报错 192.168.1.104出来的内容是 ![图片说明](https://img-ask.csdn.net/upload/201802/21/1519186346_762454.png) 希望大神可以帮忙解决
.树莓派上不太适合用opencv实时处理吗??
是这样。。跟着网上的教程用树莓派装了opencv 然后也运行了一些简单的图像处理 识别分割啥的但是感觉效果都好差。。本科生想出去参加竞赛来着。做机器人 拿树莓派做上位机再加上 跑opencv+cnn等等。。。 会不会arm根本忙不过来啊。。。我看到很多人用 openmv那个硬件不知道好不好用 听说比opencv更适用在机器人上 opencv还是需要强大的操作系统来跑啊。。!! 有没有小伙伴能给我讲一下 我现在的想法对不对或者给些建议参考 关于我后期是做opencv还是mv 或者其他方面的建议 谢谢
树莓派搭建wordpress的ip地址问题
本人刚入手树莓派。我在家用树莓派搭了wordpress,但是到学校以后就无法登陆管理员页面。我用ngrok进行的内网穿透,但是我无论在公网还是局域网下访问管理员界面都自动跳转家里wifi下分配的ip地址。(网页是可以加载的,就是管理员界面打不开,IP/wp-login.php登陆成功之后就没了。。。)后来我删了mysql里的数据,重新搭的wordpress,自己手机开热点操作的,现在想连校园网,但想请教一下ip地址问题如何解决? 想了一下,是不是通过分配局域网内的静态ip就可以解决了?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
前端 | 2. 正则
转载请注明以下: 本文转自清自以敬的博客:https://blog.csdn.net/qq_45791147 文章目录1.转义2.正则表达式初步2.1.匹配字符2.1.1.组成元素2.1.2.基础正则的设计 1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转义...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器。但是docker本身和虚拟机还是有较为明显的出入的。我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Doc...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问