Exemple #1
0
    def update(self, image=Image()):
        """
        (Image) -> (Image)
        Update database image
        """
        session = self.session_factory()
        imageDB = session.query(ImageDB).filter_by(id=image.id).first()
        dic = {}
        if (imageDB.disease.id != image.disease.id):
            dic['idDisease'] = image.disease.id
        if (imageDB.url != image.url):
            dic['url'] = image.url
        if (imageDB.description != image.description):
            dic['description'] = image.description
        if (imageDB.source != image.source):
            dic['source'] = image.source
        if (imageDB.size != image.size):
            dic['size'] = image.size
        if (dic != {}):
            session.query(ImageDB).filter_by(id=image.id).update(dic)
            session.commit()
            session.flush()
            session.refresh(imageDB)

        return Image(
            imageDB.id,
            Disease(
                imageDB.disease.id,
                Plant(imageDB.disease.plant.id,
                      imageDB.disease.plant.scientificName,
                      imageDB.disease.plant.commonName),
                imageDB.disease.scientificName, imageDB.disease.commonName),
            imageDB.url, imageDB.description, imageDB.source, imageDB.size)
Exemple #2
0
    def shot(self, camera):
        print("taking shot")
        path = '../image.jpg'
        camera.capture(path, use_video_port=True)

        image = Image(config=self.config, path=path)
        image.upload_image()
Exemple #3
0
def user_image_create():

    username_of_jwt = get_jwt_identity()

    image_id = 1
    images = Image.query.order_by(Image.id.desc()).first()
    if images is None:
        pass
    else:
        image_id = images.id + 1

    if "image" not in request.files:
        return abort(400, description="No image")

    image = request.files["image"]

    if Path(image.filename).suffix not in [".jpg", ".png"]:
        return abort(400, description="Invalid file type")

    filename = str(image_id) + Path(image.filename).suffix
    bucket = boto3.resource("s3").Bucket(current_app.config["AWS_S3_BUCKET"])
    key = f"images/user-{username_of_jwt}-image-{filename}"
    bucket.upload_fileobj(image, key)

    new_image = Image()
    new_image.username = username_of_jwt
    new_image.path = key

    db.session.add(new_image)

    db.session.commit()

    return jsonify(image_schema.dump(new_image))
Exemple #4
0
 def search(self, image=Image(), pageSize=10, offset=0):
     """
     (Image, pageSize, offset) -> [Image]
     """
     session = self.session_factory()
     query = session.query(ImageDB).filter(
         or_(ImageDB.url.like('%' + image.url + '%'),
             ImageDB.description == image.description,
             ImageDB.source == image.source))
     content = query.slice(offset, pageSize).all()
     total = query.count()
     images = []
     for imageDB in content:
         images.append(
             Image(
                 imageDB.id,
                 Disease(
                     imageDB.disease.id,
                     Plant(imageDB.disease.plant.id,
                           imageDB.disease.plant.scientificName,
                           imageDB.disease.plant.commonName),
                     imageDB.disease.scientificName,
                     imageDB.disease.commonName), imageDB.url,
                 imageDB.description, imageDB.source, imageDB.size))
     return {'total': total, 'content': images}
    def post(self):

        file = request.files["image"]

        image = Image()
        image.image = file
        image.image.content_type = "image/png"
        image.save()

        return "Image saved"
Exemple #6
0
 def create(self, analysis=Analysis()):
     """
     (Analysis) -> (Analysis)
     Add analysis to database
     """
     analysisDB = AnalysisDB(analysis=analysis)
     session = self.session_factory()
     session.add(analysisDB)
     session.flush()
     session.refresh(analysisDB)
     session.commit()
     return Analysis(
         analysisDB.id,
         image=Image(
             analysisDB.image.id,
             Disease(
                 analysisDB.image.disease.id,
                 Plant(analysisDB.image.disease.plant.id,
                       analysisDB.image.disease.plant.scientificName,
                       analysisDB.image.disease.plant.commonName),
                 analysisDB.image.disease.scientificName,
                 analysisDB.image.disease.commonName), analysisDB.image.url,
             analysisDB.image.description, analysisDB.image.source,
             analysisDB.image.size),
         classifier=Classifier(
             analysisDB.classifier.id,
             Plant(analysisDB.classifier.plant.id,
                   analysisDB.classifier.plant.scientificName,
                   analysisDB.classifier.plant.commonName),
             analysisDB.classifier.tag, analysisDB.classifier.path),
         user=User(id=analysisDB.user.id,
                   idType=analysisDB.user.idType,
                   email=analysisDB.user.email,
                   username=analysisDB.user.username))
def create(image):
    name = image.get("name", None)
    id_recipe = image.get("id_recipe", None)
    image = Image(None, name, id_recipe)
    id_img = ImageDAOImpl.insert(image)
    json.dumps(id_img)
    return id_img
Exemple #8
0
    def getImageBase64(self, image=Image(), imagesDir=""):
        """
        (Image, String) -> (Image)
        Method used to get image considering plant common name,
        disease scientific name, size image and url and
        convert it to base64 in url field
        """
        size = "large"
        if image.size == 1:
            size = "thumb"
        elif image.size == 2:
            size = "medium"
        elif image.size == 3:
            size = "large"
        filepath = "{}/{}/{}/{}/{}".format(
            imagesDir, size,
            image.disease.plant.commonName.replace(' ', '_').replace(
                '(', '_').replace(')', '_'),
            image.disease.scientificName.replace(" ", "_").replace(
                ";",
                "").replace("(",
                            "_").replace(")",
                                         "_").replace("<i>",
                                                      "").replace("</i>", ""),
            image.url)
        fh = open(filepath, 'rb')
        content = fh.read()
        fh.close()

        image.url = base64.encodestring(content).decode('utf-8')
        return image
Exemple #9
0
    def saveImage(self, image=Image(), imagesDir="", extension=".JPG"):
        """
        (Image, str, str) -> (Image)
            Method used to save images considering image url field
        """
        size = "large"
        if image.size == 1:
            size = "thumb"
        elif image.size == 2:
            size = "medium"
        elif image.size == 3:
            size = "large"
        filename = str(uuid.uuid4())
        filepath = "{}/{}/{}/{}/{}".format(
            imagesDir, size,
            image.disease.plant.commonName.replace(' ', '_').replace(
                '(', '_').replace(')', '_'),
            image.disease.scientificName.replace(" ", "_").replace(
                ";",
                "").replace("(",
                            "_").replace(")",
                                         "_").replace("<i>",
                                                      "").replace("</i>", ""),
            filename + extension)
        fh = open(filepath, 'wb')
        fh.write(base64.decodestring(image.url.encode('utf-8')))
        fh.close()

        image.url = filename + extension

        return image
class ImageCustomResource(Resource):

    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument('image')
        self.args = self.parser.parse_args()

    @marshal_with(Image.format())
    def post(self):

        file = request.files["image"]

        image = Image()
        image.image = file
        image.image.content_type = "image/png"
        image.save()

        return "Image saved"

    def get(self, id):
        image = Image.objects.get(id=id)

        response = make_response(image.image.read())
        response.content_type = "image/png"

        return response
Exemple #11
0
 def create_images(file_name):
     with open(file_name, "r") as f:
         # The first line indicates how many images store
         images_cnt = f.readline().split()
         images_list = []
         for i in range(int(images_cnt[0])):
             line = f.readline().split()
             image = Image(line[0], validator.validate_int_value(line[1]), line[2])
             images_list.append(image)
         dao.create_images(images_list)
def findAll():
    conn = ConnectionDB().getConnection()
    cursor = conn.cursor()

    try:
        images = []
        for row in cursor.execute("SELECT * FROM images"):
            images.append(Image(row[0], row[1], row[2]))
        return images
    except sqlite3.Error as error:
        print(error.with_traceback())
def findOneById(id_img):
    conn = ConnectionDB().getConnection()
    cursor = conn.cursor()

    try:
        cursor.execute('SELECT * FROM images WHERE id = ?', (id_img, ))
        row = cursor.fetchone()
        image = Image(id_img, row[1], row[2])
        return image
    except sqlite3.Error as error:
        print(error.with_traceback())
def findOneByName(name):
    conn = ConnectionDB().getConnection()
    cursor = conn.cursor()

    try:
        cursor.execute('SELECT * FROM images WHERE name = ?', (name, ))
        row = cursor.fetchone()
        image = Image(row[0], name, row[2])
        return image
    except sqlite3.Error as error:
        print(error.with_traceback())
Exemple #15
0
 def create(self, image=Image()):
     """
     (Image) -> (Image)
     Add image to database
     """
     imageDB = ImageDB(image=image)
     session = self.session_factory()
     session.add(imageDB)
     session.flush()
     session.refresh(imageDB)
     session.commit()
     return Image(
         imageDB.id,
         Disease(
             imageDB.disease.id,
             Plant(imageDB.disease.plant.id,
                   imageDB.disease.plant.scientificName,
                   imageDB.disease.plant.commonName),
             imageDB.disease.scientificName, imageDB.disease.commonName),
         imageDB.url, imageDB.description, imageDB.source, imageDB.size)
Exemple #16
0
 def create(self, analysisResult=AnalysisResult()):
     """
     (AnalysisResult) -> (AnalysisResult)
     Add analysis result to database
     """
     analysisResultDB = AnalysisResultDB(analysisResult=analysisResult)
     session = self.session_factory()
     session.add(analysisResultDB)
     session.flush()
     session.commit()
     session.refresh(analysisResultDB)
     return AnalysisResult(
         analysisResultDB.id,
         Analysis(
             analysisResultDB.analysis.id,
             Image(
                 analysisResultDB.analysis.image.id,
                 Disease(
                     analysisResultDB.analysis.image.disease.id,
                     Plant(
                         analysisResultDB.analysis.image.disease.plant.id,
                         analysisResultDB.analysis.image.disease.plant.
                         scientificName, analysisResultDB.analysis.image.
                         disease.plant.commonName),
                     analysisResultDB.analysis.image.disease.scientificName,
                     analysisResultDB.analysis.image.disease.commonName),
                 analysisResultDB.analysis.image.url,
                 analysisResultDB.analysis.image.description,
                 analysisResultDB.analysis.image.source,
                 analysisResultDB.analysis.image.size),
             Classifier(
                 analysisResultDB.analysis.classifier.id,
                 Plant(
                     analysisResultDB.analysis.classifier.plant.id,
                     analysisResultDB.analysis.classifier.plant.
                     scientificName,
                     analysisResultDB.analysis.classifier.plant.commonName),
                 analysisResultDB.analysis.classifier.tag,
                 analysisResultDB.analysis.classifier.path),
             user=User(id=analysisResultDB.analysis.user.id,
                       idType=analysisResultDB.analysis.user.idType,
                       email=analysisResultDB.analysis.user.email,
                       username=analysisResultDB.analysis.user.username)),
         Disease(
             analysisResultDB.disease.id,
             Plant(analysisResultDB.disease.plant.id,
                   analysisResultDB.disease.plant.scientificName,
                   analysisResultDB.disease.plant.commonName),
             analysisResultDB.disease.scientificName,
             analysisResultDB.disease.commonName), analysisResultDB.score,
         analysisResultDB.frame)
Exemple #17
0
    def searchByID(self, id):
        """
        (int) -> (AnalysisResult)
        Search analysis result by ID
        """
        session = self.session_factory()
        analysisResultDB = session.query(AnalysisResultDB).get(id)
        if (analysisResultDB is None):
            raise Exception("AnalysisResults not found!")

        return AnalysisResult(
            analysisResultDB.id,
            Analysis(
                analysisResultDB.analysis.id,
                Image(
                    analysisResultDB.analysis.image.id,
                    Disease(
                        analysisResultDB.analysis.image.disease.id,
                        Plant(
                            analysisResultDB.analysis.image.disease.plant.id,
                            analysisResultDB.analysis.image.disease.plant.
                            scientificName, analysisResultDB.analysis.image.
                            disease.plant.commonName),
                        analysisResultDB.analysis.image.disease.scientificName,
                        analysisResultDB.analysis.image.disease.commonName),
                    analysisResultDB.analysis.image.url,
                    analysisResultDB.analysis.image.description,
                    analysisResultDB.analysis.image.source,
                    analysisResultDB.analysis.image.size),
                Classifier(
                    analysisResultDB.analysis.classifier.id,
                    Plant(
                        analysisResultDB.analysis.classifier.plant.id,
                        analysisResultDB.analysis.classifier.plant.
                        scientificName,
                        analysisResultDB.analysis.classifier.plant.commonName),
                    analysisResultDB.analysis.classifier.tag,
                    analysisResultDB.analysis.classifier.path),
                user=User(id=analysisResultDB.analysis.user.id,
                          idType=analysisResultDB.analysis.user.idType,
                          email=analysisResultDB.analysis.user.email,
                          username=analysisResultDB.analysis.user.username)),
            Disease(
                analysisResultDB.disease.id,
                Plant(analysisResultDB.disease.plant.id,
                      analysisResultDB.disease.plant.scientificName,
                      analysisResultDB.disease.plant.commonName),
                analysisResultDB.disease.scientificName,
                analysisResultDB.disease.commonName), analysisResultDB.score,
            analysisResultDB.frame)
Exemple #18
0
 def delete(self, image=Image()):
     """
     (Image) -> (bool)
     Delete database image
     """
     status = False
     session = self.session_factory()
     imageDB = session.query(ImageDB).filter_by(id=image.id).first()
     session.delete(imageDB)
     session.commit()
     session.flush()
     if (not session.query(ImageDB).filter_by(id=imageDB.id).count()):
         status = True
     session.close()
     return status
Exemple #19
0
 def searchByID(self, id):
     """
     (Int) -> (Image)
     Method used to get image object by ID
     """
     session = self.session_factory()
     imageDB = session.query(ImageDB).get(id)
     return Image(
         imageDB.id,
         Disease(
             imageDB.disease.id,
             Plant(imageDB.disease.plant.id,
                   imageDB.disease.plant.scientificName,
                   imageDB.disease.plant.commonName),
             imageDB.disease.scientificName, imageDB.disease.commonName),
         imageDB.url, imageDB.description, imageDB.source, imageDB.size)
Exemple #20
0
    def searchByID(self, id):
        """
        (int) -> (Analysis)
        Search analysis by ID
        """
        session = self.session_factory()
        analysisDB = session.query(AnalysisDB).get(id)
        if (analysisDB is None):
            raise Exception("Analysis not found!")

        results = []
        for result in analysisDB.analysis_results:
            results.append(
                AnalysisResult(
                    id=result.id,
                    disease=Disease(
                        id=result.disease.id,
                        scientificName=result.disease.scientificName,
                        commonName=result.disease.commonName),
                    frame=result.frame,
                    score=result.score))
        return Analysis(
            id=analysisDB.id,
            image=Image(
                analysisDB.image.id,
                Disease(
                    analysisDB.image.disease.id,
                    Plant(analysisDB.image.disease.plant.id,
                          analysisDB.image.disease.plant.scientificName,
                          analysisDB.image.disease.plant.commonName),
                    analysisDB.image.disease.scientificName,
                    analysisDB.image.disease.commonName), analysisDB.image.url,
                analysisDB.image.description, analysisDB.image.source,
                analysisDB.image.size),
            classifier=Classifier(
                analysisDB.classifier.id,
                Plant(analysisDB.classifier.plant.id,
                      analysisDB.classifier.plant.scientificName,
                      analysisDB.classifier.plant.commonName),
                analysisDB.classifier.tag, analysisDB.classifier.path),
            analysis_results=results,
            user=User(id=analysisDB.user.id,
                      idType=analysisDB.user.idType,
                      email=analysisDB.user.email,
                      username=analysisDB.user.username))
Exemple #21
0
def update_rooms_images(room_id):
    data = request.get_json()

    images_dict = data['images']

    room = Room.query.filter_by(id=room_id).first()
    if room is None:
        return jsonify({'message': 'ERROR'})

    Image.query.filter_by(room_id=room.id).delete()

    for i in images_dict:
        image = Image(i['src'])
        room.images.append(image)

    db.session.commit()

    return jsonify({'message': 'SUCCESS'})
Exemple #22
0
def save_image(source, file_name, from_type='string'):
    """ Saves an image to disk.

        # Arguments
            source: image to be saved.
            from_type: format of image to be saved.

        # Raises
            NotImplementedError: if from_type is not supported.
    """

    image = Image()

    db.session.add(image)
    db.session.flush()

    image.name = file_name
    image.path = f'uploads/images/{image.id}_{file_name}'
    image.thumbnail = f'uploads/thumbnails/{image.id}_{file_name}'

    if from_type == 'np_array':
        cv2.imwrite(image.path, source)

    elif from_type == 'string':
        with open(image.path, 'wb+') as f:
            f.write(source.read())

    else:
        raise NotImplementedError(f'Support for {from_type} is currenlty not supported!')

    prediction, label, class_index = app.config['MODEL'].predict_from_path(image.path)

    image.label = label
    image.prediction = prediction
    image.class_index = int(class_index)

    thumbnail = cv2.imread(image.path) 
    thumbnail = cv2.resize(thumbnail, (100, 100))
    cv2.imwrite(image.thumbnail, thumbnail)

    db.session.add(image)
    db.session.commit()
Exemple #23
0
def create_recipe(recipe):
    name_recipe = recipe.get("name_recipe", None)
    nbr_person = recipe.get("nbr_person", None)
    id_src = recipe.get("id_src", None)
    if id_src == 0:
        id_src = None

    recipe_to_insert = Recipe(None, name_recipe, nbr_person, id_src)
    id_recipe = RecipeDAOimpl.insert(recipe_to_insert)

    for img in recipe.get("images", None):
        ImageDAOImpl.insert(Image(None, img.get("name", None), id_recipe))
    for id_cat in recipe.get("id_cats", None):
        RecipeDAOimpl.addCategory(id_recipe, id_cat)
    for id_tool in recipe.get("id_tools", None):
        RecipeDAOimpl.addTool(id_recipe, id_tool)
    for section in recipe.get("sections", None):
        SectionsRestController.add_section(id_recipe, section)
Exemple #24
0
def get_random_data():
    rooms_number = 100
    rooms = []

    for i in range(rooms_number):
        room = Room(random.choice(list(RoomTypes)), random.randint(1, 5),
                    random.randint(1, 5), random.randint(1, 10),
                    bool(random.getrandbits(1)), "desc",
                    bool(random.getrandbits(1)), bool(random.getrandbits(1)),
                    bool(random.getrandbits(1)), bool(random.getrandbits(1)),
                    bool(random.getrandbits(1)), bool(random.getrandbits(1)),
                    bool(random.getrandbits(1)), bool(random.getrandbits(1)),
                    bool(random.getrandbits(1)), bool(random.getrandbits(1)),
                    37.9754983 + random.uniform(-1, 1),
                    23.7356671 + random.uniform(-1, 1), "address", "info",
                    random.randint(1, 5), random.randint(23, 300),
                    random.uniform(10, 70), random_sentence(3),
                    random.randint(6, 20), random.randint(1, 3), 7)

        for y in range(10):
            room.images.append(
                Image('https://picsum.photos/id/' + str(i * 10 + y) +
                      '/400/400'))
            room.reviews.append(
                Review(random.uniform(1, 5), random_sentence(3),
                       random_sentence(10), 4))

            start_date = datetime.now()

            for x in range(10):
                next_date = start_date + timedelta(days=random.randint(2, 30))

            room.reservations.append(
                Reservation(start_date, next_date, Status.rented))

            start_date = next_date + timedelta(days=random.randint(20, 40))

            next_date = None
            room.reservations.append(
                Reservation(start_date, next_date, Status.not_available))

            db.session.add(room)

            db.session.commit()
Exemple #25
0
 def __init__(self,
              id=0,
              image=Image(),
              classifier=Classifier(),
              analysis_results=[],
              user=User()):
     """Analisys model constructor
     Args:
         id: Integer number to identification
         image: Image object that has been used for this Analysis
         classifier: Classifier object that has been used for this Analysis
         analysis_results: A list of AnalysisResult object with all results
         user: User which perform this analysis
     """
     self.id = id
     self.image = image
     self.classifier = classifier
     self.analysis_results = analysis_results
     self.user = user
Exemple #26
0
    def update(self, analysis=Analysis()):
        """
        (Analysis) -> (Analysis)
        update analysis table
        """
        session = self.session_factory()
        analysisDB = session.query(AnalysisDB).filter_by(
            id=analysis.id).first()
        dic = {}
        if (analysisDB.idImage != analysis.image.id):
            dic['idImage'] = analysis.image.id
        if (analysisDB.idClassifier != analysis.classifier.id):
            dic['idClassifier'] = analysis.classifier.id
        if (dic != {}):
            session.query(AnalysisDB).filter_by(id=analysis.id).update(dic)
            session.commit()
            session.flush()
            session.refresh(analysisDB)

        return Analysis(
            analysisDB.id,
            image=Image(
                analysisDB.image.id,
                Disease(
                    analysisDB.image.disease.id,
                    Plant(analysisDB.image.disease.plant.id,
                          analysisDB.image.disease.plant.scientificName,
                          analysisDB.image.disease.plant.commonName),
                    analysisDB.image.disease.scientificName,
                    analysisDB.image.disease.commonName), analysisDB.image.url,
                analysisDB.image.description, analysisDB.image.source,
                analysisDB.image.size),
            classifier=Classifier(
                analysisDB.classifier.id,
                Plant(analysisDB.classifier.plant.id,
                      analysisDB.classifier.plant.scientificName,
                      analysisDB.classifier.plant.commonName),
                analysisDB.classifier.tag, analysisDB.classifier.path),
            user=User(id=analysisDB.user.id,
                      idType=analysisDB.user.idType,
                      email=analysisDB.user.email,
                      username=analysisDB.user.username))
Exemple #27
0
    def search(self, analysis=Analysis(), pageSize=10, offset=0):
        """
        (Analysis, pageSize, offset) -> [Analysis]
        search by analysis
        """
        session = self.session_factory()
        query = session.query(AnalysisDB).filter(
            and_(AnalysisDB.idImage == analysis.image.id,
                 AnalysisDB.idClassifier == analysis.classifier.id))
        content = query.slice(offset, pageSize).all()
        total = query.count()
        analyses = []
        for analysisDB in content:
            analyses.append(
                Analysis(
                    analysisDB.id,
                    image=Image(
                        analysisDB.image.id,
                        Disease(
                            analysisDB.image.disease.id,
                            Plant(
                                analysisDB.image.disease.plant.id,
                                analysisDB.image.disease.plant.scientificName,
                                analysisDB.image.disease.plant.commonName),
                            analysisDB.image.disease.scientificName,
                            analysisDB.image.disease.commonName),
                        analysisDB.image.url, analysisDB.image.description,
                        analysisDB.image.source, analysisDB.image.size),
                    classifier=Classifier(
                        analysisDB.classifier.id,
                        Plant(analysisDB.classifier.plant.id,
                              analysisDB.classifier.plant.scientificName,
                              analysisDB.classifier.plant.commonName),
                        analysisDB.classifier.tag, analysisDB.classifier.path),
                    user=User(id=analysisDB.user.id,
                              idType=analysisDB.user.idType,
                              email=analysisDB.user.email,
                              username=analysisDB.user.username)))

        return {'total': total, 'content': analyses}
    def saveImage(self, image=Image(), imagesDir="", extension=".JPG"):
        """
        (Image, str, str) -> (Image)
            Method used to save images considering image url field
        """
        size = "large"
        if image.size == 1:
            size = "thumb"
        elif image.size == 2:
            size = "medium"
        elif image.size == 3:
            size = "large"
        filename = str(uuid.uuid4())
        filepath = "{}/{}/{}/{}/{}".format(
            imagesDir, size,
            image.disease.plant.commonName.replace(' ', '_').replace(
                '(', '_').replace(')', '_'),
            image.disease.scientificName.replace(" ", "_").replace(
                ";",
                "").replace("(",
                            "_").replace(")",
                                         "_").replace("<i>",
                                                      "").replace("</i>", ""),
            filename + extension)

        if not os.path.exists(os.path.dirname(filepath)):
            try:
                os.makedirs(os.path.dirname(filepath))
            except Exception as exc:
                raise exc

        nparr = np.fromstring(base64.b64decode(image.url), np.uint8)
        cv2.imwrite(filepath, cv2.imdecode(nparr, cv2.IMREAD_COLOR))

        image.url = filepath

        return image
Exemple #29
0
def seed_tables():
    
    # User
    for i in range(10):
        user = User()
        user.id = i
        user.displayname = f"testuser{i}"
        user.email = f"TestEmail{i}@test.com"
        user.username = f"TestUserName{i}"
        user.password = bcrypt.generate_password_hash("testpassword").decode("utf-8")
        db.session.add(user)
    
    db.session.commit()
    print("Seeded Table: user")

    # Artist
    artists = []
    for i in range(10):
        artist = Artist()
        artist.name = f"TestArtistName{i}"
        db.session.add(artist)
        artists.append(artist)
    
    db.session.commit()
    print("Seeded Table: artist")

    # Image
    for i in range(20):
        image = Image()
        image.url = f"TestURL{i}"
        image.height = choice(range(600, 1200))
        image.width = choice(range(600, 1200))
        db.session.add(image)
    
    db.session.commit()
    print("Seeded Table: images")

    def moods_table_creation():
        moods = Moods()

        moods.amusement = choice(range(1, 101))
        moods.joy = choice(range(1, 101))
        moods.beauty = choice(range(1, 101))
        moods.relaxation = choice(range(1, 101))
        moods.sadness = choice(range(1, 101))
        moods.dreaminess = choice(range(1, 101))
        moods.triumph = choice(range(1, 101))
        moods.anxiety = choice(range(1, 101))
        moods.scariness = choice(range(1, 101))
        moods.annoyance = choice(range(1, 101))
        moods.defiance = choice(range(1, 101))
        moods.feelingpumped = choice(range(1, 101))

        db.session.add(moods)
        db.session.commit()
        return moods

    # Tracks
    for i in range(30):
        track = Tracks()
        track.trackname = f"TestTrackName{i}"
        track.artist_id = choice(artists).id
        track.moods_id = moods_table_creation().id
        track.trackurl = f"TestTrackURL{i}"
        db.session.add(track)
    
    db.session.commit()
    print("Seeded Table: tracks")
    
Exemple #30
0
def organize(database, workdir, output, size):
    """ (str, str, str, str) -> Bool

        Method used to execute organization of images
    """
    filehandler = open(output, "a")
    logging.info("CONNECTING DATABASE {}".format(database))
    conn = sqlite3.connect(database)
    cursor = conn.cursor()
    plants = []

    scriptPlants = ""
    scriptDiseases = ""
    scriptImages = ""

    for row in cursor.execute(
            "SELECT id, crop_common_name, crop_scientific_name, disease_common_name, disease_scientific_name, url, description, metadata FROM ANNOTATIONS;"
    ):
        oldAnnotation = OldAnnotation(row[0], row[1], row[2], row[3], row[4],
                                      row[5], row[6], row[7])

        if (oldAnnotation.url == "" or oldAnnotation.cropScientificName == ""):
            continue

        indexPlant = searchPlantByScientificName(plants,
                                                 oldAnnotation.cropCommonName)
        plant = Plant()
        if (indexPlant == -1):
            plant = Plant(scientificName=oldAnnotation.cropScientificName,
                          commonName=oldAnnotation.cropCommonName,
                          diseases=[])
            logging.info("CREATING {}".format(plant.commonName).replace(
                " ", "_").replace(";", "").replace("(", "_").replace(
                    ")", "_").replace("<i>", "").replace("</i>", ""))
            os.system("mkdir -p " + workdir + "/" + plant.commonName.replace(
                " ", "_").replace(";", "").replace("(", "_").replace(
                    ")", "_").replace("<i>", "").replace("</i>", ""))
            #filehandler.write("INSERT INTO PLANTS(scientific_name, common_name) VALUES ('{}', '{}')\n".format(plant.scientificName, plant.commonName))
            scriptPlants += "INSERT INTO PLANTS(scientific_name, common_name) VALUES ('{}', '{}');\n".format(
                plant.scientificName, plant.commonName)
        else:
            logging.info("index: {} - plant: {}".format(
                str(indexPlant), plants[indexPlant].scientificName))
            plant = plants[indexPlant]

        disease = Disease(plant=plant,
                          commonName=oldAnnotation.diseaseCommonName,
                          scientificName=oldAnnotation.diseaseScientificName)

        if (oldAnnotation.diseaseCommonName == ""
                or oldAnnotation.diseaseScientificName == ""
                or "Healthy" in oldAnnotation.description
                or "healthy" in oldAnnotation.description):
            disease.scientificName = "healthy"
            disease.commonName = "healthy"

        indexDisease = searchDiseaseByScientificName(disease.plant,
                                                     disease.scientificName)
        logging.info("DISEASE: {} - {} - {}".format(disease.scientificName,
                                                    plant.scientificName,
                                                    indexDisease))
        if (indexDisease == -1):
            logging.info("CREATING {}/{}".format(
                plant.commonName.replace(" ", "_").replace(";", "").replace(
                    "(", "_").replace(")",
                                      "_").replace("<i>",
                                                   "").replace("</i>", ""),
                disease.scientificName.replace(" ", "_").replace(
                    ";", "").replace("(", "_").replace(")", "_").replace(
                        "<i>", "").replace("</i>", "")))
            os.system("mkdir -p " + workdir + "/" + plant.commonName.replace(
                " ", "_").replace(";", "").replace("(", "_").replace(
                    ")", "_").replace("<i>", "").replace("</i>", "") + "/" +
                      disease.scientificName.replace(" ", "_").replace(
                          ";", "").replace("(", "_").replace(")", "_").replace(
                              "<i>", "").replace("</i>", ""))
            scriptDiseases += "INSERT INTO DISEASES(id_plant, scientific_name, common_name) VALUES ((SELECT id FROM PLANTS WHERE scientific_name = '{}' LIMIT 1),'{}', '{}');\n".format(
                plant.scientificName, disease.scientificName,
                disease.commonName)
            #filehandler.write("INSERT INTO DISEASES(id, scientific_name, common_name) VALUES ((SELECT id FROM PLANTS WHERE scientific_name = '{}' LIMIT 1),'{}', '{}')\n".format(disease.plant.scientificName, disease.scientificName, disease.commonName))
        else:
            disease = plant.diseases[indexDisease]

        image = Image(disease=disease,
                      url=oldAnnotation.url.replace("<i>",
                                                    "").replace("</i>", ""),
                      description=oldAnnotation.description,
                      source=oldAnnotation.metadata)

        regex = re.compile("[\w]+/[\w,;\-]*\/([\w\.;\-,]+)+")
        logging.info(image.url)
        if (not regex.match(image.url) == None):
            logging.info(image.url)
            image.url = regex.match(image.url).group(1)
            if ("large" in image.url):
                continue
        else:
            logging.info(image.url)
            continue

        if ("large" in disease.scientificName):
            continue
        logging.info("CREATING {}/{}/{} ".format(
            plant.commonName.replace(" ", "_"),
            disease.scientificName.replace(" ", "_"),
            image.url.replace(" ", "_")))
        os.makedirs(workdir + "/" + plant.commonName.replace(" ", "_").replace(
            ";", "").replace("(", "_").replace(")", "_").replace(
                "<i>", "").replace("</i>", "") +
                    "/" + disease.scientificName.replace(" ", "_").replace(
                        ";", "").replace("(", "_").replace(")", "_").replace(
                            "<i>", "").replace("</i>", "") + "/",
                    exist_ok=True)
        dir1 = workdir + "/" + plant.commonName.replace(" ", "_").replace(
            "(", "_").replace(")", "_").replace("<i>", "").replace(
                "</i>", "") + "/" + image.url
        dir2 = workdir + "/" + plant.commonName.replace(" ", "_").replace(
            ";", "").replace(
                "(", "_").replace(")", "_").replace("<i>", "").replace(
                    "</i>", "") + "/" + disease.scientificName.replace(
                        " ", "_").replace(";", "").replace("(", "_").replace(
                            ")", "_").replace("<i>", "").replace(
                                "</i>", "") + "/" + image.url
        logging.info(dir1)
        logging.info(dir2)

        if ("large" in dir2):
            continue

        try:
            shutil.copyfile(dir1, dir2)
        except FileNotFoundError:
            continue

        #filehandler.write("INSERT INTO IMAGES(id_disease, url, description, source) VALUES ((SELECT id FROM DISEASES WHERE scientific_name = '{}' AND id_plant = (SELECT id FROM PLANTS WHERE scientific_name = '{}' LIMIT 1) LIMIT 1), '{}', '{}', '{}')\n".format(image.disease.scientificName, image.disease.plant.scientificName, image.url, image.description, image.source))
        scriptImages += "INSERT INTO IMAGES(id_disease, url, description, source, size) VALUES ((SELECT id FROM DISEASES WHERE scientific_name = '{}' AND id_plant = (SELECT id FROM PLANTS WHERE scientific_name = '{}' LIMIT 1) LIMIT 1), '{}', '{}', '{}', (SELECT id FROM TYPES WHERE value='{}' AND description='image-size' LIMIT 1));\n".format(
            disease.scientificName, plant.scientificName, image.url,
            image.description, image.source, size)

        disease.images.append(image)

        if (indexDisease == -1):
            plant.diseases.append(disease)
        else:
            plant.diseases[indexDisease] = disease

        if (indexPlant == -1):
            plants.append(plant)
        else:
            plants[indexPlant] = plant

    filehandler.write(scriptPlants)
    filehandler.write(scriptDiseases)
    filehandler.write(scriptImages)

    filehandler.close()
    return True