Как сохранить и получить изображение из базы данных с помощью Pymongo? - PullRequest
0 голосов
/ 29 января 2019

Я сделал сохранение изображения в базе данных с помощью командной строки, а также получил его с помощью команд put и get, но мы работаем над проектом python, и я хочу сделать это вручную с помощью pymongo.поэтому, пожалуйста, помогите мне.

видите, я пытался сделать это через cmd, а также пытался использовать команду os.path.join, но это показывает ошибку, и я думаю, что это не может быть сделано так.

вижу, что мой код графического интерфейса выглядит следующим образом: я хочу добавить его к базе данных в mongodb, используя Pymongo:

import sys
import os
import cv2
import numpy as np
from PyQt5.QtGui import QPainter, QColor, QIcon, QPixmap, QImage
from PyQt5.QtWidgets import QMainWindow, QWidget, QApplication, QAbstractButton, QLineEdit, QInputDialog, QFileDialog, QLabel, QMessageBox
from PyQt5.QtCore import *

 #image button
class PicButton(QAbstractButton):
    def __init__(self, pixmap, parent=None):
        super(PicButton, self).__init__(parent)
        self.pixmap = pixmap

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(event.rect(), self.pixmap)

# Main Program          
class App(QMainWindow):
    clickcount = 0
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.title = 'Recommendation System For Clothing-RSFC'
        self.left = 0
        self.top = 0
        self.width = 1350
        self.height = 690
        self.clickcount = 0
        self.initUI()

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):
        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)

        self.rect1 = qp.setBrush(QColor(255, 255, 255))         #Outer Rectangle
        qp.drawRect(500, 100, 800, 570)

        self.rect2 = qp.setBrush(QColor(255, 255, 255))             #1st left rectangle
        qp.drawRect(530, 130, 330, 220)

        self.rect3 = qp.setBrush(QColor(255, 80, 0, 160))       #2nd left rectangle
        qp.drawRect(940, 130, 330, 220)

        self.rect4 = qp.setBrush(QColor(25, 0, 90, 200))        #1st right rectangle 
        qp.drawRect(530, 430, 330, 220)

        self.rect5 = qp.setBrush(QColor(25, 0, 90, 200))        #2nd right rectangle
        qp.drawRect(940, 430, 330, 220)

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setWindowIcon(QIcon('download.jpg'))

        # Create textbox
        self.textbox = QLineEdit(self)
        #Font for textbox
        font = self.textbox.font()      # lineedit current font
        font.setPointSize(16)               # change it's size
        self.textbox.setFont(font)      # set font
        self.textbox.move(0, 250)
        self.textbox.resize(415,40)

        #tick and cross button for rect2 
        button= PicButton(QPixmap(os.path.join(os.getcwd(),"tick.svg")),self)
        button.move(630,350)
        button.resize(60,40)
        button.clicked.connect(self.on_click7)

        button= PicButton(QPixmap(os.path.join(os.getcwd(),"cross.jpg")),self)
        button.move(700,350)
        button.resize(60,40)
        button.clicked.connect(self.on_click8)

        #tick and cross button for rect3 
        button= PicButton(QPixmap(os.path.join(os.getcwd(),"tick.svg")),self)
        button.move(1040,350)
        button.resize(60,40)
        button.clicked.connect(self.on_click9)

        button= PicButton(QPixmap(os.path.join(os.getcwd(),"cross.jpg")),self)
        button.move(1110,350)
        button.resize(60,40)
        button.clicked.connect(self.on_click10)

        #tick and cross button for rect4 
        button= PicButton(QPixmap(os.path.join(os.getcwd(),"tick.svg")),self)
        button.move(630,650)
        button.resize(60,40)
        button.clicked.connect(self.on_click11)

        button= PicButton(QPixmap(os.path.join(os.getcwd(),"cross.jpg")),self)
        button.move(700,650)
        button.resize(60,40)
        button.clicked.connect(self.on_click12)

        #tick and cross button for rect5 
        button= PicButton(QPixmap(os.path.join(os.getcwd(),"tick.svg")),self)
        button.move(1040,650)
        button.resize(60,40)
        button.clicked.connect(self.on_click13)

        button= PicButton(QPixmap(os.path.join(os.getcwd(),"cross.jpg")),self)
        button.move(1110,650)
        button.resize(60,40)
        button.clicked.connect(self.on_click14)

        #Slogan
        #button= PicButton(QPixmap('C:/Users/Abhimanyu/Desktop/LYP/GUI/capture1.jpg'),self)
        button= PicButton(QPixmap(os.path.join(os.getcwd(),"rsfc_logo.jpg")),self)
        button.move(0,0)
        button.resize(450,225)

        #Search Button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"search.jpg")),self)
        button.setToolTip('Start personalized search')
        button.move(420,250)
        button.resize(30,40) 
        button.clicked.connect(self.search)

        #Face Detect Button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"face_detect.jpg")),self)
        button.setToolTip('Click and detect')
        button.move(15,320)
        button.resize(175,80) 
        button.clicked.connect(self.face_detect)

        #Upload Button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"upload.jpg")),self)
        button.setToolTip('Upload clothing pic')
        button.move(275,320)
        button.resize(175,80) 
        button.clicked.connect(self.upload)

        #Select Button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"select.jpg")),self)
        button.setToolTip('Select clothing image')
        button.move(15,580) 
        button.resize(175,80)
        button.clicked.connect(self.select)

        #webcam button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"webcam.jpg")),self)
        button.setToolTip('webcam detect')
        button.move(100,430)
        button.resize(250,120) 
        button.clicked.connect(self.webcam)

        #Match clothes button
        button = PicButton(QPixmap(os.path.join(os.getcwd(),"match.jpg")),self)
        button.setToolTip('Match clothes')
        button.move(275,580)
        button.resize(175,80) 
        button.clicked.connect(self.match)

    #Searchbox on click
    def search(self):
        textboxValue = self.textbox.text()
        print(textboxValue)
        textboxValue = self.textbox.setText("")

    #Webcam onclick
    def webcam(self):
        print('webcam detect')
        filename, okPressed = QInputDialog.getText(self, "Get text","Your name:", QLineEdit.Normal, "")
        if okPressed and filename != '':
            cam = cv2.VideoCapture(0)
            s, img = cam.read()
            #cv2.imshow("Test",im)
            cv2.imwrite(filename+".jpg", img)
            os.system("python -m label_image_gender --graph=retrained_graph_gender.pb --image="+filename+".jpg")
            os.system("python -m label_image_beard_shaved --graph=retrained_graph_beard_shaved.pb --image="+filename+".jpg")
            os.system("python -m label_image_tone --graph=retrained_graph_tone.pb --image="+filename+".jpg")
        elif okPressed and filename == "":
            QMessageBox.about(self, 'Error', 'Please enter your name!')
            self.webcam()   

    #Detect face onclick
    def face_detect(self):
        print('face detect')
        #Select pic to detect face
        window = QWidget()
        filename,_filter = QFileDialog.getOpenFileName(window, 'Open Image', '/', 'Image Files (*.png *.xpm *.jpg *.bmp)')
        #face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
        #img = cv2.imread(filename)
        print("Started")
        os.system("python -m label_image_gender --graph=retrained_graph_gender.pb --image="+filename)
        os.system("python -m label_image_beard_shaved --graph=retrained_graph_beard_shaved.pb --image="+filename)
        os.system("python -m label_image_tone --graph=retrained_graph_tone.pb --image="+filename)

    #Upload file onclick
    def upload(self, value=""):
        self.clickcount += 1
        if self.clickcount == 5:
            QMessageBox.about(self, 'Error', 'You cant Upload 5 image')
        else:
            window = QWidget()
            filename,_filter = QFileDialog.getOpenFileName(window, 'Open Image', '/', 'Image Files (*.png *.xpm *.jpg *.bmp)')
            print(filename)
            if self.clickcount == 1:
                button1 = PicButton(QPixmap(filename),self)         #Image displaying
                button1.setToolTip('First Pic Uploaded')
                button1.move(530,130)
                button1.resize(330,220)
                button1.show()

            elif self.clickcount == 2:
                button2 = PicButton(QPixmap(filename),self)         #Image displaying
                button2.setToolTip('Second Pic Uploaded')
                button2.move(940,130)
                button2.resize(330,220)
                button2.show()

            elif self.clickcount == 3:
                button3 = PicButton(QPixmap(filename),self)         #Image displaying
                button3.setToolTip('Second Pic Uploaded')
                button3.move(530,430)
                button3.resize(330,220)
                button3.show()

            elif self.clickcount == 4:
                button4 = PicButton(QPixmap(filename),self)         #Image displaying
                button4.setToolTip('Fourth Pic Uploaded')
                button4.move(940,430)
                button4.resize(330,220)
                button4.show()

    #Select on click
    def select(self):
        print('select')     

    #Match clothes onclick
    def match(self):
        print('matching')       

    # tick for rect2
    def on_click7(self):
        print('i loved the cloth')

    # cross for rect2
    def on_click8(self):
        #QtCore.QObject.connect(self.deletebutton1, QtCore.SIGNAL("clicked()"), button1.clear)
        self.upload("rect2")
        self.clickcount -= 1

    # tick for rect3
    def on_click9(self):
        print('i loved the cloth')

    # cross for rect3
    def on_click10(self):
        print('i hate this type of cloth')

    # tick for rect4
    def on_click11(self):
        print('i loved the cloth')

    # cross for rect4
    def on_click12(self):
        print('i hate this type of cloth')

    # tick for rect5
    def on_click13(self):
        print('i loved the cloth')

    # cross for rect5   
    def on_click14(self):
        print('i hate this type of cloth')



if __name__ == '__main__':
    APP = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(APP.exec_())

это должно показать изображение магазина на одном из четырех прямоугольников (получено наодин из 4 прямоугольников)

...