Example #1
0
    def test_search_image_url_and_geo(self):
        """ search over image url combined with geo """

        # upload an image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7129, 74.0058))
        img2 = self.app.inputs.create_image_from_url(
            image_id=image_id,
            url=sample_inputs.METRO_IMAGE_URL,
            geo=geo,
            allow_duplicate_url=True)

        term1 = clarifai.rest.InputSearchTerm(
            url=sample_inputs.METRO_IMAGE_URL)
        geo_box = GeoBox(GeoPoint(40.7028, 74.0009),
                         GeoPoint(40.7328, 74.0359))
        term2 = clarifai.rest.InputSearchTerm(geo=Geo(geo_box=geo_box))
        query = clarifai.rest.SearchQueryBuilder()
        query.add_term(term1)
        query.add_term(term2)

        search_res = self.app.inputs.search(query)
        self.assertGreater(len(search_res), 0)
        match = False
        for img in search_res:
            if img.input_id == image_id or img.url == img2.url:
                match = True
                break
        self.assertTrue(match)

        # delete second test image
        self.app.inputs.delete(img2.input_id)
Example #2
0
    def test_search_geo_with_input_output_tag(self):
        """ search over input and output tag together with geo info """

        # upload an image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7129, 74.0058))
        img2 = self.app.inputs.create_image_from_url(
            image_id=image_id,
            url=sample_inputs.METRO_IMAGE_URL,
            geo=geo,
            concepts=["train"],
            allow_duplicate_url=True)

        geo_box = GeoBox(GeoPoint(40.7028, 74.0009),
                         GeoPoint(40.7328, 74.0359))
        term1 = clarifai.rest.InputSearchTerm(geo=Geo(geo_box=geo_box))
        term2 = clarifai.rest.InputSearchTerm(concept="train")
        term3 = clarifai.rest.OutputSearchTerm(concept="railway")
        query = clarifai.rest.SearchQueryBuilder()
        query.add_term(term1)
        query.add_term(term2)
        query.add_term(term3)

        search_res = self.app.inputs.search(query, page=1, per_page=20)
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)
        # match = False
        # for img in search_res:
        #  if img.input_id == image_id or img.url == img2.url:
        #    match = True
        #    break
        # self.assertTrue(match)

        # delete second test image
        self.app.inputs.delete(img2.input_id)
    def test_search_image_url_and_geo(self):
        """ search over image url combined with geo """

        # upload an image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7129, 74.0058))
        img2 = self.app.inputs.create_image_from_url(image_id=image_id,
                                                     url=urls[0],
                                                     geo=geo,
                                                     allow_duplicate_url=True)

        term1 = clarifai.rest.InputSearchTerm(url=urls[0])
        geo_box = GeoBox(GeoPoint(40.7028, 74.0009),
                         GeoPoint(40.7328, 74.0359))
        term2 = clarifai.rest.InputSearchTerm(geo=Geo(geo_box=geo_box))
        query = clarifai.rest.SearchQueryBuilder()
        query.add_term(term1)
        query.add_term(term2)

        search_res = self.app.inputs.search(query)
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)
        # match = False
        # for img in search_res:
        #  if img.input_id == image_id or img.url == img2.url:
        #    match = True
        #    break
        # self.assertTrue(match)

        # delete second test image
        self.app.inputs.delete(img2.input_id)
Example #4
0
    def test_post_image_with_geo_and_metadata(self):
        """ add image with geo info, retrieve it and compare the meta data """

        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(-30, 40))
        meta = {'myid': image_id, 'key_id': 'test_meta'}

        img = self.app.inputs.create_image_from_url(
            url=sample_inputs.METRO_IMAGE_URL,
            geo=geo,
            metadata=meta,
            image_id=image_id,
            allow_duplicate_url=True)

        res = self.app.inputs.get(image_id)
        self.assertTrue(isinstance(res, ClarifaiImage))
        self.assertEqual(image_id, res.input_id)

        geo_res = res.geo
        self.assertTrue(isinstance(geo_res, Geo))
        self.assertAlmostEqual(geo_res.geo_point.longitude, -30, delta=0.0001)
        self.assertAlmostEqual(geo_res.geo_point.latitude, 40, delta=0.0001)

        self.assertEqual(meta, res.metadata)

        self.app.inputs.delete(image_id)
Example #5
0
    def test_search_geo_point(self):
        """ search input geo point data """

        # upload image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7128, 74.0059))
        img1 = self.app.inputs.create_image_from_url(
            image_id=image_id,
            url=sample_inputs.METRO_IMAGE_URL,
            geo=geo,
            allow_duplicate_url=True)

        self.app.wait_for_specific_input_uploads_to_finish(ids=[image_id],
                                                           max_wait=30)

        # simple geo search
        search_res = self.app.inputs.search_by_geo(GeoPoint(40.7128, 74.0059))
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)

        search_res = self.app.inputs.search_by_geo(GeoPoint(40.7128, 74.0059),
                                                   GeoLimit("mile", 10))
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)

        # delete first test image
        self.app.inputs.delete(img1.input_id)

        # upload 2nd image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7129, 74.0058))
        img2 = self.app.inputs.create_image_from_url(
            image_id=image_id,
            url=sample_inputs.METRO_IMAGE_URL,
            geo=geo,
            allow_duplicate_url=True)

        self.app.wait_for_specific_input_uploads_to_finish(ids=[image_id],
                                                           max_wait=30)

        search_res = self.app.inputs.search_by_geo(GeoPoint(40.7128, 74.0059),
                                                   GeoLimit("kilometer", 9))
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)

        # delete second test image
        self.app.inputs.delete(img2.input_id)
  def test_post_image_with_geo(self):
    """ add image with geo info, retrieve it and compare the meta data """

    image_id = uuid.uuid4().hex
    geo = Geo(GeoPoint(-30, 40))
    img = self.app.inputs.create_image_from_url(
        url=urls[0], geo=geo, image_id=image_id, allow_duplicate_url=True)

    res = self.app.inputs.get(image_id)
    self.assertTrue(isinstance(res, ClarifaiImage))
    self.assertEqual(image_id, res.input_id)

    geo_res = res.geo
    self.assertAlmostEqual(geo_res.geo_point.longitude, -30, delta=0.0001)
    self.assertAlmostEqual(geo_res.geo_point.latitude, 40, delta=0.0001)

    self.app.inputs.delete(image_id)
  def test_search_geo_box(self):
    """ search input geo point data """

    # upload an image
    image_id = uuid.uuid4().hex
    geo = Geo(GeoPoint(40.7129, 74.0058))
    img2 = self.app.inputs.create_image_from_url(
        image_id=image_id, url=sample_inputs.METRO_IMAGE_URL, geo=geo, allow_duplicate_url=True)

    self.app.wait_for_specific_input_uploads_to_finish(ids=[image_id], max_wait=30)

    geo_box = GeoBox(GeoPoint(40.7028, 74.0009), GeoPoint(40.7328, 74.0359))
    search_res = self.app.inputs.search_by_geo(geo_box=geo_box)
    # disable this until citus migration fully finishes
    # self.assertGreater(len(search_res), 0)

    # delete second test image
    self.app.inputs.delete(img2.input_id)
Example #8
0
  def test_post_image_with_geo(self):
    """ add image with geo info, retrieve it and compare the meta data """

    image_id = uuid.uuid4().hex
    geo = Geo(GeoPoint(-30, 40))
    self.app.inputs.create_image_from_url(
        url=sample_inputs.METRO_IMAGE_URL, geo=geo, image_id=image_id, allow_duplicate_url=True)

    self.app.wait_for_specific_input_uploads_to_finish(ids=[image_id])

    res = self.app.inputs.get(image_id)
    self.assertTrue(isinstance(res, ClarifaiImage))
    self.assertEqual(image_id, res.input_id)

    geo_res = res.geo
    self.assertAlmostEqual(geo_res.geo_point.longitude, -30, delta=0.0001)
    self.assertAlmostEqual(geo_res.geo_point.latitude, 40, delta=0.0001)

    self.app.inputs.delete(image_id)
    def test_search_geo_box(self):
        """ search input geo point data """

        # upload an image
        image_id = uuid.uuid4().hex
        geo = Geo(GeoPoint(40.7129, 74.0058))
        img2 = self.app.inputs.create_image_from_url(image_id=image_id,
                                                     url=urls[0],
                                                     geo=geo,
                                                     allow_duplicate_url=True)

        geo_box = GeoBox(GeoPoint(40.7028, 74.0009),
                         GeoPoint(40.7328, 74.0359))
        search_res = self.app.inputs.search_by_geo(geo_box=geo_box)
        # disable this until citus migration fully finishes
        # self.assertGreater(len(search_res), 0)

        # delete second test image
        self.app.inputs.delete(img2.input_id)
Example #10
0
    def test_geo(self):
        # make a geo point for input
        Geo(geo_point=GeoPoint(10, 20))

        # make a geo point and geo limit for search
        Geo(geo_point=GeoPoint(10, 20), geo_limit=GeoLimit("mile", 33))

        # make a geo box for search
        p1 = GeoPoint(0, 0)
        p2 = GeoPoint(30, -20.22)
        Geo(geo_box=GeoBox(p1, p2))

        # make a geo point only
        Geo(geo_point=p1)

        # make an invalid Geo
        with self.assertRaises(Exception):
            Geo(geo_point=p1, geo_box=GeoBox(p1, p2), geo_limit=GeoLimit())

        # make an invalid Geo
        with self.assertRaises(Exception):
            Geo()
Example #11
0
def test_search_inputs_by_geo_location(
        mock_http_client):  # type: (mock.Mock) -> None
    mock_execute_request = mock_request(mock_http_client,
                                        json_responses=[
                                            """
{
  "status": {
    "code": 10000,
    "description": "Ok"
  },
  "hits": [
    {
      "score": 0.5,
      "input": {
        "id": "@inputID",
        "created_at": "2016-11-22T17:06:02Z",
        "data": {
          "image": {
            "url": "@inputURL"
          }
        },
        "status": {
          "code": 30000,
          "description": "Download complete"
        }
      }
    }
  ]
}
""", """
{
  "status": {
    "code": 10000,
    "description": "Ok"
  },
  "hits": []
}
"""
                                        ])

    app = ClarifaiApp()

    qb = SearchQueryBuilder()
    qb.add_term(
        InputSearchTerm(geo=Geo(geo_point=GeoPoint(longitude=1.5, latitude=-1),
                                geo_limit=GeoLimit(limit_type='kilometer',
                                                   limit_range=1))))
    inputs = app.inputs.search(qb)

    assert inputs[0].input_id == '@inputID'
    assert inputs[0].score == 0.5

    assert_request(
        mock_execute_request, 'POST', '/v2/searches', """
{
  "query": {
    "ands": [
      {
        "input": {
          "data": {
            "geo": {
              "geo_point": {
                "longitude": 1.5,
                "latitude": -1
              },
              "geo_limit": {
                "type": "withinKilometers",
                "value": 1
              }
            }
          }
        }
      }
    ]
  },
  "pagination": {
    "per_page": 20, 
    "page": 1
  }
}
  """)
Example #12
0
def test_bulk_create_image(mock_http_client):  # type: (mock.Mock) -> None
  mock_execute_request = mock_request(
      mock_http_client, """
{
  "status": {
    "code": 10000,
    "description": "Ok"
  },
  "inputs": [
    {
      "id": "@inputID1",
      "data": {
        "image": {
          "url": "https://some.image.url1"
        },
        "geo": {
          "geo_point": {
            "longitude": 55,
            "latitude": 66
          }
        }
      },
      "created_at": "2019-01-17T12:43:04.895006174Z",
      "modified_at": "2019-01-17T12:43:04.895006174Z",
      "status": {
        "code": 30001,
        "description": "Download pending"
      }
    },
    {
      "id": "@inputID2",
      "data": {
        "image": {
          "url": "https://some.image.url2"
        }
      },
      "created_at": "2019-01-17T12:43:04.895006174Z",
      "modified_at": "2019-01-17T12:43:04.895006174Z",
      "status": {
        "code": 30001,
        "description": "Download pending"
      }
    }
  ]
}
""")

  app = ClarifaiApp()
  images = app.inputs.bulk_create_images([
      Image(
          url='https://some.image.url1',
          image_id='@inputID1',
          allow_dup_url=True,
          geo=Geo(geo_point=GeoPoint(55, 66))),
      Image(url='https://some.image.url2', image_id='@inputID2', allow_dup_url=True),
  ])

  assert images[0].input_id == '@inputID1'
  assert images[0].url == 'https://some.image.url1'
  assert images[0].geo.geo_point.longitude == 55
  assert images[0].geo.geo_point.latitude == 66
  assert images[0].status.code == 30001

  assert images[1].input_id == '@inputID2'
  assert images[1].url == 'https://some.image.url2'
  assert not images[1].geo
  assert images[1].status.code == 30001

  assert_request(
      mock_execute_request, 'POST', '/v2/inputs', """
{
  "inputs": [
    {
      "id": "@inputID1",
      "data": {
        "image": {
          "url": "https://some.image.url1",
          "allow_duplicate_url": true
        },
        "geo": {
          "geo_point": {
            "longitude": 55,
            "latitude": 66
          }
        }
      }
    },
    {
      "id": "@inputID2",
      "data": {
        "image": {
          "url": "https://some.image.url2",
          "allow_duplicate_url": true
        }
      }
    }
  ]
}
        """)