pyqt5中如何通过OpenCV读取一帧图像喂入网络呢?

我想通过pyqt5制作一个UI界面封装google object detection api的示例代码,源代码中是识别单张图片,我想通过摄像头输入一帧的图像然后进行识别显示。整个程序如下:

 # coding:utf-8
'''
V3.0A版本,尝试实现摄像头识别
'''
import numpy as np
import cv2
import os
import os.path
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile
import pylab
from distutils.version import StrictVersion
from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class UiForm():
    openfile_name_pb = ''
    openfile_name_pbtxt = ''
    openpic_name = ''
    num_class = 0

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(600, 690)
        Form.setMinimumSize(QtCore.QSize(600, 690))
        Form.setMaximumSize(QtCore.QSize(600, 690))
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setGeometry(QtCore.QRect(20, 20, 550, 100))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        # 加载模型文件按钮
        self.btn_add_file = QtWidgets.QPushButton(self.frame)
        self.btn_add_file.setObjectName("btn_add_file")
        self.horizontalLayout_2.addWidget(self.btn_add_file)
        # 加载pbtxt文件按钮
        self.btn_add_pbtxt = QtWidgets.QPushButton(self.frame)
        self.btn_add_pbtxt.setObjectName("btn_add_pbtxt")
        self.horizontalLayout_2.addWidget(self.btn_add_pbtxt)
        # 输入检测类别数目按钮
        self.btn_enter = QtWidgets.QPushButton(self.frame)
        self.btn_enter.setObjectName("btn_enter")
        self.horizontalLayout_2.addWidget(self.btn_enter)
        # 打开摄像头
        self.btn_opencam = QtWidgets.QPushButton(self.frame)
        self.btn_opencam.setObjectName("btn_objdec")
        self.horizontalLayout_2.addWidget(self.btn_opencam)
        # 开始识别按钮
        self.btn_objdec = QtWidgets.QPushButton(self.frame)
        self.btn_objdec.setObjectName("btn_objdec")
        self.horizontalLayout_2.addWidget(self.btn_objdec)
        # 退出按钮
        self.btn_exit = QtWidgets.QPushButton(self.frame)
        self.btn_exit.setObjectName("btn_exit")
        self.horizontalLayout_2.addWidget(self.btn_exit)
        # 显示识别后的画面
        self.lab_rawimg_show = QtWidgets.QLabel(Form)
        self.lab_rawimg_show.setGeometry(QtCore.QRect(50, 140, 500, 500))
        self.lab_rawimg_show.setMinimumSize(QtCore.QSize(500, 500))
        self.lab_rawimg_show.setMaximumSize(QtCore.QSize(500, 500))
        self.lab_rawimg_show.setObjectName("lab_rawimg_show")
        self.lab_rawimg_show.setStyleSheet(("border:2px solid red"))


        self.retranslateUi(Form)
        # 这里将按钮和定义的动作相连,通过click信号连接openfile槽?
        self.btn_add_file.clicked.connect(self.openpb)
        # 用于打开pbtxt文件
        self.btn_add_pbtxt.clicked.connect(self.openpbtxt)
        # 用于用户输入类别数
        self.btn_enter.clicked.connect(self.enter_num_cls)
        # 打开摄像头
        self.btn_opencam.clicked.connect(self.opencam)
        # 开始识别
        # ~ self.btn_objdec.clicked.connect(self.object_detection)
        # 这里是将btn_exit按钮和Form窗口相连,点击按钮发送关闭窗口命令
        self.btn_exit.clicked.connect(Form.close)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "目标检测"))
        self.btn_add_file.setText(_translate("Form", "加载模型文件"))
        self.btn_add_pbtxt.setText(_translate("Form", "加载pbtxt文件"))
        self.btn_enter.setText(_translate("From", "指定识别类别数"))
        self.btn_opencam.setText(_translate("Form", "打开摄像头"))
        self.btn_objdec.setText(_translate("From", "开始识别"))
        self.btn_exit.setText(_translate("Form", "退出"))
        self.lab_rawimg_show.setText(_translate("Form", "识别效果"))

    def openpb(self):
        global openfile_name_pb
        openfile_name_pb, _ = QFileDialog.getOpenFileName(self.btn_add_file,'选择pb文件','/home/kanghao/','pb_files(*.pb)')
        print('加载模型文件地址为:' + str(openfile_name_pb))

    def openpbtxt(self):
        global openfile_name_pbtxt
        openfile_name_pbtxt, _ = QFileDialog.getOpenFileName(self.btn_add_pbtxt,'选择pbtxt文件','/home/kanghao/','pbtxt_files(*.pbtxt)')
        print('加载标签文件地址为:' + str(openfile_name_pbtxt))

    def opencam(self):
        self.camcapture = cv2.VideoCapture(0)
        self.timer = QtCore.QTimer()
        self.timer.start()
        self.timer.setInterval(100) # 0.1s刷新一次
        self.timer.timeout.connect(self.camshow)

    def camshow(self):
        global camimg
        _ , camimg = self.camcapture.read()
        print(_)
        camimg = cv2.resize(camimg, (512, 512))
        camimg = cv2.cvtColor(camimg, cv2.COLOR_BGR2RGB)
        print(type(camimg))
        #strcamimg = camimg.tostring()
        showImage = QtGui.QImage(camimg.data, camimg.shape[1], camimg.shape[0], QtGui.QImage.Format_RGB888)
        self.lab_rawimg_show.setPixmap(QtGui.QPixmap.fromImage(showImage))

    def enter_num_cls(self):
        global num_class
        num_class, okPressed = QInputDialog.getInt(self.btn_enter,'指定训练类别数','你的目标有多少类?',1,1,28,1)
        if okPressed:
            print('识别目标总类为:' + str(num_class))

    def img2pixmap(self, image):
        Y, X = image.shape[:2]
        self._bgra = np.zeros((Y, X, 4), dtype=np.uint8, order='C')
        self._bgra[..., 0] = image[..., 2]
        self._bgra[..., 1] = image[..., 1]
        self._bgra[..., 2] = image[..., 0]
        qimage = QtGui.QImage(self._bgra.data, X, Y, QtGui.QImage.Format_RGB32)
        pixmap = QtGui.QPixmap.fromImage(qimage)
        return pixmap

    def object_detection(self):
        sys.path.append("..")
        from object_detection.utils import ops as utils_ops

        if StrictVersion(tf.__version__) < StrictVersion('1.9.0'):
            raise ImportError('Please upgrade your TensorFlow installation to v1.9.* or later!')

        from utils import label_map_util

        from utils import visualization_utils as vis_util

        # Path to frozen detection graph. This is the actual model that is used for the object detection.
        PATH_TO_FROZEN_GRAPH = openfile_name_pb

        # List of the strings that is used to add correct label for each box.
        PATH_TO_LABELS = openfile_name_pbtxt

        NUM_CLASSES = num_class

        detection_graph = tf.Graph()
        with detection_graph.as_default():
          od_graph_def = tf.GraphDef()
          with tf.gfile.GFile(PATH_TO_FROZEN_GRAPH, 'rb') as fid:
            serialized_graph = fid.read()
            od_graph_def.ParseFromString(serialized_graph)
            tf.import_graph_def(od_graph_def, name='')

        category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS, use_display_name=True)

        def load_image_into_numpy_array(image):
          (im_width, im_height) = image.size
          return np.array(image.getdata()).reshape(
              (im_height, im_width, 3)).astype(np.uint8)

        # For the sake of simplicity we will use only 2 images:
        # image1.jpg
        # image2.jpg
        # If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
        TEST_IMAGE_PATHS = camimg
        print(TEST_IMAGE_PATHS)
        # Size, in inches, of the output images.
        IMAGE_SIZE = (12, 8)

        def run_inference_for_single_image(image, graph):
          with graph.as_default():
            with tf.Session() as sess:
              # Get handles to input and output tensors
              ops = tf.get_default_graph().get_operations()
              all_tensor_names = {output.name for op in ops for output in op.outputs}
              tensor_dict = {}
              for key in [
                  'num_detections', 'detection_boxes', 'detection_scores',
                  'detection_classes', 'detection_masks'
              ]:
                tensor_name = key + ':0'
                if tensor_name in all_tensor_names:
                  tensor_dict[key] = tf.get_default_graph().get_tensor_by_name(
                      tensor_name)
              if 'detection_masks' in tensor_dict:
                # The following processing is only for single image
                detection_boxes = tf.squeeze(tensor_dict['detection_boxes'], [0])
                detection_masks = tf.squeeze(tensor_dict['detection_masks'], [0])
                # Reframe is required to translate mask from box coordinates to image coordinates and fit the image size.
                real_num_detection = tf.cast(tensor_dict['num_detections'][0], tf.int32)
                detection_boxes = tf.slice(detection_boxes, [0, 0], [real_num_detection, -1])
                detection_masks = tf.slice(detection_masks, [0, 0, 0], [real_num_detection, -1, -1])
                detection_masks_reframed = utils_ops.reframe_box_masks_to_image_masks(
                    detection_masks, detection_boxes, image.shape[0], image.shape[1])
                detection_masks_reframed = tf.cast(
                    tf.greater(detection_masks_reframed, 0.5), tf.uint8)
                # Follow the convention by adding back the batch dimension
                tensor_dict['detection_masks'] = tf.expand_dims(
                    detection_masks_reframed, 0)
              image_tensor = tf.get_default_graph().get_tensor_by_name('image_tensor:0')

              # Run inference
              output_dict = sess.run(tensor_dict,
                                     feed_dict={image_tensor: np.expand_dims(image, 0)})

              # all outputs are float32 numpy arrays, so convert types as appropriate
              output_dict['num_detections'] = int(output_dict['num_detections'][0])
              output_dict['detection_classes'] = output_dict[
                  'detection_classes'][0].astype(np.uint8)
              output_dict['detection_boxes'] = output_dict['detection_boxes'][0]
              output_dict['detection_scores'] = output_dict['detection_scores'][0]
              if 'detection_masks' in output_dict:
                output_dict['detection_masks'] = output_dict['detection_masks'][0]
          return output_dict


        #image = Image.open(TEST_IMAGE_PATHS)
        # the array based representation of the image will be used later in order to prepare the
        # result image with boxes and labels on it.
        image_np = load_image_into_numpy_array(TEST_IMAGE_PATHS)
        # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
        image_np_expanded = np.expand_dims(image_np, axis=0)
        # Actual detection.
        output_dict = run_inference_for_single_image(image_np, detection_graph)
        # Visualization of the results of a detection.
        vis_util.visualize_boxes_and_labels_on_image_array(
            image_np,
            output_dict['detection_boxes'],
            output_dict['detection_classes'],
            output_dict['detection_scores'],
            category_index,
            instance_masks=output_dict.get('detection_masks'),
            use_normalized_coordinates=True,
            line_thickness=8)
        plt.figure(figsize=IMAGE_SIZE)
        plt.imshow(image_np)
        #plt.savefig(str(TEST_IMAGE_PATHS)+".jpg")

## 用于显示ui界面的命令
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Window = QtWidgets.QWidget()
    # ui为根据类Ui_From()创建的实例
    ui = UiForm()
    ui.setupUi(Window)
    Window.show()
    sys.exit(app.exec_())  

但是运行提示:
图片说明
求助

1个回答

问题已解决……
完全不需要load_image_into_numpy_array这个函数了啊……我现在输入的本来就是numpy.array的图片了……

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python2.7如何安装pyqt5-tools
在使用pip install python-qt5可以成功安装pyqt5,但无法安装pyqt5-tools
Anaconda下如何离线安装Pyqt5 并使用PyQt designer?
Python新手(使用Anaconda学习中)求教各路大神: 1.因某些原因,电脑无法直接联网,需要离线安装各种软件、模块,请问Anaconda下如何离线安装Pyqt5 并使用PyQt designer,以实现GUI编程? 2.网上多为Anaconda+Pycharm+PyQt或Anaconda3 + PyQt5 + Eric6安装,请问Anaconda+PyQt下,Pycharm或Eric是必须的吗?Anacondat和Pycharm是什么关系?
关于Python pyqt做GUI 读取摄像头视频的问题
我在网上找了一些资料通过opencv读取摄像头在一个新的窗口显示,可是我想把显示放在自己做好的widget中,把摄像头显示作为一个页面的一部分,没找到相关的代码,有没有大神指导指导
pyqt5中QTabBarClicked怎么使用
有大佬知道pyqt5中 QTabBarClicked怎么使用吗?我没找到相关例子和文档。具体情况是我想点击一个Tab头实现隐藏它的QTabWidgit内容的功能。求高人指点思路。
pyqt5里如何做图像互动(处理)?
最近项目里想实现用pyqt5做一个GUI,能实现的功能大概是:首先能打开一些图片(容易实现)。然后用户可以和图片互动(鼠标或者触摸屏),例如在图片上画一个矩形,打点之类的,然后我希望获得这些矩形啊点啊的各种信息,比如位置。 想问一下有没有大牛知道该如何实现,自己搜索了一下pyqtgraph,不过这个貌似是自己画interactive图用的。跟我想做的不太一样。
使用PyQt4和opencv遇到的Type error
我在使用PyQt4(QtGui,QtCore和uic), opencv, numpy, PTL Image, PTL.ImageQt self.currentFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #opencv默认是BGR顺序,转为RGB self.currentSeg = Image.fromarray(thresh).convert('RGB') self.currentSeg = ImageQt(self.currentSeg) height, width = self.currentFrame.shape[:2] img = QtGui.QImage(self.currentFrame, width, height, QtGui.QImage.Format_RGB888) img = QtGui.QPixmap.fromImage(img) self.video_label.setPixmap(img) #显示视频区域 seg = QtGui.QImage(self.currentSeg) seg = QtGui.QPixmap(seg) self.seg_label.setPixmap(seg) # 显示分割视频区域 使用的是Windows 7, Python 3.6.5, PyCharm的平台 报错内容: Traceback (most recent call last): File "D:/Pycharm_Programmes/recognize/step_1(1).py", line 127, in play seg = QtGui.QImage(self.currentSeg) TypeError: QImage(): argument 1 has unexpected type 'ImageQt' 程序制作UI在MainWindows左边打印一个视频label,右边打印一个视频label,坐标改了也没有用,没有覆盖 不管右边打印什么UI都显示不出来 是使用setPixmap() 左边实时显示当前摄像头视频,同时右边显示摄像头视频二值化 不清楚为什么不能同时显示两个视频label stackoverflow 和 csdn都没有看到类似的报错 挺急的,在线等
pyqt5中怎么去除QToolBox中item的间隔xian
使用pyqt5做GUI,QToolBox中item之间默认有间隔 如图中【我的好友】与【陌生人】之间的间隔 请问怎么控制这个间隔空间的大小 ![图片说明](https://img-ask.csdn.net/upload/201910/21/1571651073_842342.png)
PyQt5中如何在lable中加载的图片上绘制矩形框呢?
我的程序是通过摄像头采集一帧图像,点击开始标记按钮后显示在按钮左侧的lable中(灰色框)。 我希望可以在lable中加载的一帧图像中通过点击鼠标左键开始绘制矩形,按住左键拖动时改变矩形的形状,松开左键后完成绘制。(和lableImg软件类似)。 请问如何实现上述功能呢?我目前找到的方法是使用QPainter来实现,但是在我的代码中该如何实现呢?万分感谢! ![图片说明](https://img-ask.csdn.net/upload/201812/12/1544601796_693173.png) 附上我的完整代码如下: ``` # -*- coding: utf-8 -*- import sys import cv2 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # ~ class MyLabel(QLabel): # ~ def paintEvent(self, event): # ~ width = self.pos2[0]-self.pos1[0] # ~ height = self.pos2[1] - self.pos1[1] # ~ qp = QPainter() # ~ qp.begin(self) # ~ qp.drawRect(self.pos1[0], self.pos1[1], width, height) # ~ qp.end() # ~ def mousePressEvent(self, event): # ~ self.pos1[0], self.pos1[1] = event.pos().x(), event.pos().y() # ~ print("clicked") # ~ def mouseReleaseEvent(self, event): # ~ self.pos2[0], self.pos2[1] = event.pos().x(), event.pos().y() # ~ print("released") # ~ self.update() class Ui_train_window(QtWidgets.QWidget): def setupUi(self, train_window): train_window.setObjectName("train_window") train_window.resize(690, 600) train_window.setMaximumSize(QtCore.QSize(690, 600)) self.horizontalLayoutWidget = QtWidgets.QWidget(train_window) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 10, 681, 80)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.lab_enter_name = QtWidgets.QLabel(self.horizontalLayoutWidget) self.lab_enter_name.setObjectName("lab_enter_name") self.horizontalLayout.addWidget(self.lab_enter_name) self.le_username = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_username.setObjectName("le_username") self.horizontalLayout.addWidget(self.le_username) self.lab_enter_pw = QtWidgets.QLabel(self.horizontalLayoutWidget) self.lab_enter_pw.setObjectName("lab_enter_pw") self.horizontalLayout.addWidget(self.lab_enter_pw) self.le_userpw = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_userpw.setObjectName("le_userpw") self.le_userpw.setEchoMode(QLineEdit.Password) self.horizontalLayout.addWidget(self.le_userpw) self.label = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.le_ipadr = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_ipadr.setObjectName("le_ipadr") self.horizontalLayout.addWidget(self.le_ipadr) self.btn_openIPcam = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.btn_openIPcam.setMinimumSize(QtCore.QSize(50, 10)) self.btn_openIPcam.setObjectName("btn_openIPcam") self.horizontalLayout.addWidget(self.btn_openIPcam) self.show = QtWidgets.QLabel(train_window) self.show.setGeometry(QtCore.QRect(15, 110, 531, 371)) self.show.setObjectName("show") self.show.setStyleSheet(("border:2px solid lightgray")) self.verticalLayoutWidget = QtWidgets.QWidget(train_window) self.verticalLayoutWidget.setGeometry(QtCore.QRect(560, 100, 111, 381)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.btn_start = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_start.setObjectName("btn_start") self.verticalLayout.addWidget(self.btn_start) self.combo_label = QtWidgets.QComboBox(self.verticalLayoutWidget) self.combo_label.setObjectName("combo_label") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.verticalLayout.addWidget(self.combo_label) self.btn_save = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_save.setObjectName("btn_save") self.verticalLayout.addWidget(self.btn_save) self.btn_finish = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_finish.setObjectName("btn_finish") self.verticalLayout.addWidget(self.btn_finish) self.horizontalLayoutWidget_2 = QtWidgets.QWidget(train_window) self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 500, 681, 71)) self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.lab_stepnum = QtWidgets.QLabel(self.horizontalLayoutWidget_2) self.lab_stepnum.setObjectName("lab_stepnum") self.horizontalLayout_2.addWidget(self.lab_stepnum) self.le_stepnm = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2) self.le_stepnm.setObjectName("le_stepnm") self.horizontalLayout_2.addWidget(self.le_stepnm) self.lab_batchsize = QtWidgets.QLabel(self.horizontalLayoutWidget_2) self.lab_batchsize.setObjectName("lab_batchsize") self.horizontalLayout_2.addWidget(self.lab_batchsize) self.le_batchsize = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2) self.le_batchsize.setObjectName("le_batchsize") self.horizontalLayout_2.addWidget(self.le_batchsize) self.btn_pretrain = QtWidgets.QPushButton(self.horizontalLayoutWidget_2) self.btn_pretrain.setObjectName("btn_pretrain") self.horizontalLayout_2.addWidget(self.btn_pretrain) self.btn_retrain = QtWidgets.QPushButton(self.horizontalLayoutWidget_2) self.btn_retrain.setObjectName("btn_retrain") self.horizontalLayout_2.addWidget(self.btn_retrain) self.show.raise_() self.horizontalLayoutWidget.raise_() self.verticalLayoutWidget.raise_() self.horizontalLayoutWidget_2.raise_() self.retranslateUi(train_window) self.btn_openIPcam.clicked.connect(self.IPinfo) self.btn_start.clicked.connect(self.labledata) QtCore.QMetaObject.connectSlotsByName(train_window) def retranslateUi(self, train_window): _translate = QtCore.QCoreApplication.translate train_window.setWindowTitle(_translate("train_window", "训练工具")) self.lab_enter_name.setText(_translate("train_window", "输入IP摄像头用户名:")) self.lab_enter_pw.setText(_translate("train_window", "输入IP摄像头密码:")) self.label.setText(_translate("train_window", "IP地址")) self.btn_openIPcam.setText(_translate("train_window", "连接IP摄像头")) self.show.setText(_translate("train_window", "")) self.btn_start.setText(_translate("train_window", "开始标记")) self.combo_label.setItemText(0, _translate("train_window", "a")) self.combo_label.setItemText(1, _translate("train_window", "b")) self.combo_label.setItemText(2, _translate("train_window", "c")) self.combo_label.setItemText(3, _translate("train_window", "d")) self.combo_label.setItemText(4, _translate("train_window", "e")) self.combo_label.setItemText(5, _translate("train_window", "f")) self.btn_save.setText(_translate("train_window", "保存")) self.btn_finish.setText(_translate("train_window", "标记结束")) self.lab_stepnum.setText(_translate("train_window", "迭代次数:")) self.lab_batchsize.setText(_translate("train_window", "batchsize:")) self.btn_pretrain.setText(_translate("train_window", "预训练")) self.btn_retrain.setText(_translate("train_window", "重新训练")) def IPinfo(self): username = self.le_username.text() password = self.le_userpw.text() ipaddress = self.le_ipadr.text() #cam_rtsp_addr = "rtsp://" + username + ":" + password + "@" + ipaddress + "/h264/ch33/main/av_stream" #self.camcapture = cv2.VideoCapture(cam_rtsp_addr) self.camcapture = cv2.VideoCapture(0) self.timer = QtCore.QTimer() self.timer.start() self.timer.setInterval(0.3) self.timer.timeout.connect(self.camshow) def camshow(self): global showImage _ , camimg = self.camcapture.read() camimg = cv2.cvtColor(camimg, cv2.COLOR_BGR2RGB) showImage = QtGui.QImage(camimg.data, camimg.shape[1], camimg.shape[0], QtGui.QImage.Format_RGB888) def labledata(self): self.show.setPixmap(QtGui.QPixmap.fromImage(showImage)) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) Window = QtWidgets.QWidget() ui = Ui_train_window() ui.setupUi(Window) Window.show() sys.exit(app.exec_()) ```
python Pyqt5 中GUI变量无法调用
``` #windowsUI.py——自动生成的GUI界面 class Ui_winUI(object): def setupUi(self, winUI): winUI.setObjectName("winUI") winUI.resize(1200, 614) winUI.setMinimumSize(QtCore.QSize(1200, 614)) winUI.setMaximumSize(QtCore.QSize(1200, 614)) winUI.setIconSize(QtCore.QSize(3 ``` ``` #Info.py——需要调用windowsUI里面的参数,如:获取用户输入的name值 class MainInfo(QMainWindow,windowsUI.Ui_winUI): def __init__(self): QMainWindow.__init__(self) self.setupUi(self) self.btn_request.clicked.connect(self.fill_in) def fill_in(self): name = self.line_name.text() #获取GUI界面‘名字’的值赋给name print(name) #运行这个py文件,测试name可以正常输出 testname=‘测试姓名’ ``` ``` #run.py 问题就在这里,我想让info.py里面的name从这里调用,发现报错未定义 class MainCode(QMainWindow,windowsUI.Ui_winUI): def __init__(self): super(QMainWindow, self).__init__() self.setupUi(self) self.info=Info.MainInfo() self.btn_request.clicked.connect(self.ce) def ce(self): a=self.info.name print(a) #这里用了好几种方法都报错未定义 print(testname)#直接定义的变量则可以输出 if __name__ == '__main__': app = QApplication(sys.argv) md = MainCode() md.show() sys.exit(app.exec_()) ``` 想请问一下大佬们,这个info.py里面定义的变量(值来自GUI),怎么才能让run.py里面可以顺利调用??
这是一个关于pyhton pyqt5的相关问题
![图片说明](https://img-ask.csdn.net/upload/201911/25/1574657874_579553.png) 我装完PYQT5,启动一个窗体保存后,产生了ui文件,前半段是自动生成的,后半段是我加的,怎么那么多红线呀,这可怎么改呀?
用PyQt5,通过url获取页面,然后把整个页面截屏
import sys from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView app = QApplication(sys.argv) browser = QWebEngineView() browser.load(QUrl("http://news.baidu.com/?tn=news")) browser.show() app.exec_() r = WebRender(url) html = r.frame.toHtml() page = etree.HTML(html.encode('utf-8')) 这个页面整个截屏
python 的 PyQT5 问题
我按照例子改写,改写结束不能正常运行。(原来的代码写在 后面) 以下是我的代码 ``` import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * global sec sec = 0 class WorkThread(QThread): trigger = pyqtSignal() def __int__(self): super(WorkThread, self).__init__() def run(self): for i in range(2000000000): pass # 循环完毕后发出信号 self.trigger.emit() class MainTimer(QWidget): def __init__(self): super(MainTimer, self).__init__() self.initUI() def initUI(self): layout = QVBoxLayout(self) # 添加控件 lcdNumber = QLCDNumber() layout.addWidget(lcdNumber) self.button = QPushButton("测试") layout.addWidget(self.button) # timer = QTimer() # 连接测试按钮和槽函数work self.timer = QTimer() self.workThread = WorkThread() self.button.clicked.connect(self.work) # 每次计时结束,触发setTime self.timer.timeout.connect(self.countTime) self.resize(300, 120) self.show() def work(self): # 计时器每秒计数 self.timer.start(1000) # 计时开始 self.workThread.start() # 当获得循环完毕的信号时,停止计数 self.workThread.trigger.connect(self.timeStop) def countTime(self): global sec sec += 1 # LED显示数字+1 self.lcdNumber.display(sec) def timeStop(self): self.timer.stop() print("运行结束用时", self.lcdNumber.value()) global sec sec = 0 if __name__ == "__main__": app = QApplication(sys.argv) top = MainTimer() # top.show() sys.exit(app.exec_()) ``` 下边是原来代码代码 : ``` import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * global sec sec = 0 # 增加了一个继承自QThread类的类,重新写了它的run()函数 # run()函数即是新线程需要执行的:执行一个循环;发送计算完成的信号。 class WorkThread(QThread): trigger = pyqtSignal() def __int__(self): super(WorkThread, self).__init__() def run(self): for i in range(2000000000): pass # 循环完毕后发出信号 self.trigger.emit() def countTime(): global sec sec += 1 # LED显示数字+1 lcdNumber.display(sec) def work(): # 计时器每秒计数 timer.start(1000) # 计时开始 workThread.start() # 当获得循环完毕的信号时,停止计数 workThread.trigger.connect(timeStop) def timeStop(): timer.stop() print("运行结束用时", lcdNumber.value()) global sec sec = 0 if __name__ == "__main__": app = QApplication(sys.argv) top = QWidget() top.resize(300, 120) # 垂直布局类QVBoxLayout layout = QVBoxLayout(top) # 加个显示屏 lcdNumber = QLCDNumber() layout.addWidget(lcdNumber) button = QPushButton("测试") layout.addWidget(button) timer = QTimer() workThread = WorkThread() button.clicked.connect(work) # 每次计时结束,触发 countTime timer.timeout.connect(countTime) top.show() sys.exit(app.exec_()) ``` ``` ```
PyQt5中setText函数在mac中不可用
大神们,求问,我在windows上写的代码没有问题,但放在mac上就不行,用PyQt5,然后添加了ui,里面有一个label,我在调用的时候提示不能使用它的setText函数。setText函数就没有作用,这是什么情况呀~
PyQt5计时器QTimer的停止和重启
由于我有一个耗时的子程序,所以我想用QTimer()加上进度条的方法优化用户的等待时间, 但是,当我初始化计时器,并start()后,发现相关的超时槽函数并没有触发,这是为什么了? ```python """创建一个带提示的进度条""" from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sys import time class MyProgressBar(QWidget): def __init__(self,showMessage = "提示信息",parent = None): super(MyProgressBar, self).__init__(parent) self.message = showMessage self.setWindowTitle("加载数据") self.pbar = QProgressBar() # 构建一个进度条 self.label = QLabel() # 添加到布局 self.layout = QVBoxLayout() self.setLayout(self.layout) self.layout.addWidget(self.label) # 提示信息 self.layout.addWidget(self.pbar) # 进度条 self.label.setText(self.message) self.timer = QTimer(self) # 初始化一个时钟 self.step = 0 # 进度条的值 self.timer.start(50) self.timer.timeout.connect(self.update) self.show() #self.setWindowFlags(Qt.WindowStaysOnTopHint) def setMessage(self,message): """重新设置信息,并重启进度条""" print(self.timer.isActive()) self.message = message self.step = 0 if not self.timer.isActive(): self.timer.start(50) self.show() def callback(self, signal): print("调用回调函数",signal) if signal is False: return if self.timer.isActive(): # 当前正在运行 self.pbar.setValue(100) self.timer.stop() self.step = 0 # 重置 QMessageBox.information( self, "提示", "{},已经完成".format(self.message), QMessageBox.Yes | QMessageBox.No ) #self.setWindowModality(Qt.NonModal) self.hide() def update(self): print("调用的时钟事件") self.pbar.setValue(self.step) # 赋新值 if self.step >= 100: # 停止进度条 self.timer.stop() self.step = 0 # 卡在99%,等后台程序运行完成则到100% elif self.step < 99: self.step += 1 def worker(): time.sleep(5) if __name__ == '__main__': app = QApplication(sys.argv) myui = MyProgressBar(showMessage="第一次") worker() # 模拟耗时程序 myui.callback(True) # time.sleep(1) # myui.setMessage("第二次") # time.sleep(5) # myui.callback(True) sys.exit(app.exec_()) ``` 而且,发现删除耗时程序`worker()`和回调函数后,进度条能一直到99%并卡住?
如何用pyqt5实现类似于word中的形状插入功能?
![图片说明](https://img-ask.csdn.net/upload/201910/22/1571740710_358358.png) 通过pyqt5的gui实现如图所示的功能,例如你点击“矩形”便在下面的界面出现一个可以编辑的矩形文本框
pycharm availabel platform plugins are:windows 升级PyQt5之后崩溃了
今天在打包的时候,因为出现一些问题,所以就把Pyqt5升级了一下,升级结束的时候还出现了一行红色的字,当时没注意看,大概意思好像是pyqt5升级到了最新版本,然后pyqt5-tool有一句红色的字提示了,当时没看。 然后突然就发现Desinger页面打不开了。 提示pycharm availabel platform plugins are:windows 然后我各种找,一顿测试,改环境变量,改虚拟环境,复制platforms文件等等,都没用。 不停测试之后,终于找到了一个非常勉强但是却没办法的办法,就是替换platforms里面的windows,如下图, ![图片说明](https://img-ask.csdn.net/upload/201911/28/1574936941_485739.png) 我发现两个windows文件大小不一样(我也不记得大的,小的从哪来的了),问题应该就是出在这里,但是我又看不懂,目前只能通过不停的替换文件来操作,,,简直了。。。 请教有没有同样情况的大神可以帮忙的。不要发链接了,csdn的我可以很负责的说每一个都试过了......(好吧,也不排除我手残没试对的)
PyQt5中为什么通过循环遍历向tableWidget表格里添加按钮控件,只有最后一个位置有按钮,其他位置都不显示?
已经成功的向表格中单元格加入控件,但是在通过循环遍历加入按钮时,发现只有最后一个位置能显示出按钮,遍历的其他位置都显示空白,无法显示出按钮。但是这些单元格也变成了无法选中的状态。求大神帮助一下! ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576139273_805826.png) ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576139284_773615.png)
matplotlib所绘制的图像在全屏查看时比例失调,怎么解决?
将matplotlib嵌入pyqt5绘制自定义图像,但是在全屏状态下查看图像时,图像比例失调,请问有解决方案么?
anaconda安装pyQt5失败
![图片说明](https://img-ask.csdn.net/upload/201912/21/1576917253_120772.png) 我用命令安装,结果没找到这个包 该怎么安装啊
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
Android 9.0系统新特性,对刘海屏设备进行适配
其实Android 9.0系统已经是去年推出的“老”系统了,这个系统中新增了一个比较重要的特性,就是对刘海屏设备进行了支持。一直以来我也都有打算针对这个新特性好好地写一篇文章,但是为什么直到拖到了Android 10.0系统都发布了才开始写这篇文章呢?当然,一是因为我这段时间确实比较忙,今年几乎绝大部分的业余时间都放到写新书上了。但是最主要的原因并不是这个,而是因为刘海屏设备的适配存在一定的特殊性
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问